document.getElementById("someId") Vs.какой-то идентификатор
-
29-09-2019 - |
Вопрос
Этот вопрос может показаться глупым, но в чем разница между доступом к элементу (с идентификатором "someId") с использованием document.getElementById("someId") и.просто набираю какой-нибудь идентификатор?
например:
document.getElementById("someId").style.top = "12px";
против
someId.style.top = "12px";
Вот пример кода http://jsfiddle.net/pRaTA/ (Я обнаружил, что это не работает в Firefox)
Решение
Разница в том, что в то время как someId
Работает в некоторых браузерах, document.getElementById("someId")
на самом деле соответствует стандарту W3C.
Другие советы
Объявление элемента DOM ID не означает, что он доступен в виде глобальной переменной во всех браузерах. Единственный поперечный совместимый способ получить это, чтобы сначала сделать.
var someId = document.getElementById("someId");
Редактировать: Я сделал этот тестовый код, который проверяет, что браузеры на основе WebKit, кажется, сделают удостоверение личности доступным в качестве VAR без предварительного объявления его. В соответствии с это, также то есть покажет это поведение.
- Firefox: объект / неопределенный
- Safari: объект / объект
- Chrome: объект / объект
- IE: объект / объект (неверно)
Код:
<html>
<head>
</head>
<body>
<div id="foo"></div>
<script type="text/javascript">
alert("getElementById: "+typeof document.getElementById("foo"));
alert("as a var: "+typeof foo);
</script>
</body>
В собочных сценариях клиента мы делаем Document.getelementById, чтобы получить элемент OBJ на веб-странице. Чтобы получить конкретный элемент из DOM и его свойств и методов, вам необходимо использовать метод GetElementByID. В jQuery вы можете просто сделать VAR OBJX = $ («# ID»)
Где списать идентификатор, прямой не сделает работу. Потому что, как вы извлеките элемент OBJ из дома без пересечения документа. Метод Document.getElementbyId будет вытянуть информацию элемента из документа. Я надеюсь, что это имеет некоторое смысл.
Используя только то someId
это старый способ выбрать элемент (я думаю, что это было реализовано по IE). Document.getElementById - это стандартный, который работает на всех браузерах.
Учитывая сценарий, который вы поддерживаете только старые браузеры IE. Document.GETELEMENTYBYID все еще более надежный и читаемый. Надежный, если вы используете все номера для идентификаторов.
Например:
input element id="123"
document.getElementById('123').value; // this one works
123.value; // this one doesn't
Доступ к элементам как к свойствам глобального объекта, названного в честь идентификатора элемента (ваш второй пример), — это удобство, возникшее в IE и скопированное Safari и Chrome.Это действительно плохая идея, и вам не следует ее использовать.Основная проблема — коллизии имен (например, элементы с совершенно допустимыми идентификаторами, такими как «предупреждение» или «документ»).
document.getElementById()
, с другой стороны, является давно устоявшимся стандартом DOM и, помимо какие-то идиотские недостатки IE, является надежным.Всегда используйте его, а не другую форму.