Вопрос

Этот вопрос может показаться глупым, но в чем разница между доступом к элементу (с идентификатором "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, является надежным.Всегда используйте его, а не другую форму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top