DOM4: Устаревшие свойства и методы, что это значит?

«Предупреждение: в DOM Core 1, 2 и 3 Attr унаследован от Node. В DOM4 это уже не так. Чтобы привести реализацию Attr в соответствие со спецификацией, ведутся работы по его изменению, чтобы он больше не наследовал от Node. . Вы не должны использовать какие-либо свойства или методы Node для объектов Attr. Начиная с Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4) те, которые будут удалены, выводят предупреждающие сообщения на консоль. Вам следует пересмотреть свой код. соответственно. Полный список см. в разделе Устаревшие свойства и методы».

Прокрутив страницу вниз, мы можем увидеть замены для nodeName и NodeValue, используя Attr.name и Attr.value.

https://developer.mozilla.org/en/DOM/Attr#Deprecated_properties_and_methods

Что это на самом деле означает для других методов, таких как атрибуты или дочерние узлы? Ссылка говорит, что он устарел, но они не дают никакой замены!

Он устарел для атрибута, но подходит ли он и для узла?

Объект атрибута: http://www.w3schools.com/jsref/dom_obj_attr.asp

Редактировать: nodeValue будет ТОЛЬКО устаревшим для атрибутов (Attr), поскольку Attr больше не будет наследоваться от узла на уровне DOM 4:

Вот краткий пример, который помог мне понять:

<div id="myAttribute">myTextNode</div>

var myDiv = document.getElementById("myAttribute");

// If you want to get "myAttribute" from div tag

alert(myDiv.attributes[0].value);
// Correct way to get value of an attribute (displays "myAttribute")
alert(myDiv.attributes[0].nodeValue);
// Working too but deprecated method for Attr since it doesn't inherit from Node in DOM4 (.nodeValue is specific to a Node, not an Attribute)

// If you want to get "myTextNode" from div tag

alert(myDiv.childNodes[0].value);
// Not working since .value is specific to an attribute, not a Node (displays "undefined")
alert(myDiv.childNodes[0].nodeValue);
// Working, .nodeValue is the correct way to get the value of a Node, it will not be deprecated for Nodes! (displays "myTextNode")

Возможно, это позволит избежать путаницы для других при доступе к атрибутам/узлам :)


person baptx    schedule 08.05.2012    source источник
comment
я думаю, что можно с уверенностью предположить, что весь объект Attr будет объявлен устаревшим, и я не вижу причин для его использования.   -  person jbabey    schedule 08.05.2012
comment
Объект атрибута @jbabey не будет устаревшим, и по причине его использования я обновил свой пост.   -  person baptx    schedule 08.05.2012


Ответы (1)


Они говорят, что объекты, которые были Attr экземплярами (например, те, что были возвращены Element.getAttributeNode()), раньше имел свойства, унаследованные от Node.

Однако, поскольку в DOM4 это не так, они пытаются удалить это наследование. Из-за этого, когда вы теперь получаете экземпляр объекта Attr, свойства, перечисленные в устаревших list будут вести себя так, как они задокументированы.

Большой вопрос: Это устарело для Атрибута, но и для Узла тоже?: Нет, они не устарели. Вы можете увидеть список свойств Node на его собственной странице документации.

Attr объекты все равно мало используются (никогда?); вы уверены, что это вас касается?

person Matt    schedule 08.05.2012
comment
Как мы можем узнать, используем ли мы Attr вместо Node? Когда я использую document.getElementsByTagName(script)[2].attributes[0].nodeValue, консоль Firebug сообщает, что использование атрибута атрибута nodeValue устарело. Вместо этого используйте значение. Но вы говорите, что nodeValue устарел только для Attr, поэтому я и спрашиваю. - person baptx; 08.05.2012
comment
Это объект Attr, к которому я обращаюсь w3schools.com/jsref/prop_attr_name.asp. вот почему он запрашивает .value вместо .nodeValue, я думаю - person baptx; 08.05.2012
comment
Спасибо @Matt, я лучше понял ваш ответ после повторного прочтения. - person baptx; 08.05.2012