Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DOM4: Deprecated properties and methods, what does it mean?

"Warning: In DOM Core 1, 2 and 3, Attr inherited from Node. This is no longer the case in DOM4. In order to bring the implementation of Attr up to specification, work is underway to change it to no longer inherit from Node . You should not be using any Node properties or methods on Attr objects. Starting in Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4) , the ones that are going to be removed output warning messages to the console. You should revise your code accordingly. See Deprecated properties and methods for a complete list."

Scrolling down the page, we can see replacements for nodeName and NodeValue, using Attr.name and Attr.value.

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

What does it really mean for other methods like attributes or childNodes? The reference says it is deprecated but they don't give any replacement!

It is deprecated for an Attribute but is it for a Node too?

Attr object: http://www.w3schools.com/jsref/dom_obj_attr.asp

Edit: nodeValue will ONLY be deprecated for Attributes (Attr) since Attr will not inherit from a Node anymore in DOM Level 4:

Here's a quick example that helped me to understand:

<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")

Maybe this will avoid confusion to others when accessing Attributes/Nodes :)

like image 216
baptx Avatar asked May 08 '12 13:05

baptx


1 Answers

What they are saying is that objects that were Attr instances (e.g. such as those returned by Element.getAttributeNode()), used to have properties that it inherited from Node.

However, because this is not the case in DOM4, they are trying to remove this inheritance. Because of this, when you now get an instance of a Attr object, the properties listed in the deprecated list will behave as they're documented.

The big question: It is deprecated for an Attribute but is it for a Node too?: No, they are not deprecated. You can see the list of properties Node has from it's own documentation page.

Attr objects aren't used much (ever?) anyway; are you sure this concerns you?

like image 144
Matt Avatar answered Oct 01 '22 22:10

Matt