2012-11-21 16 views
6

prüfen diese jsfiddle separat in Chrome und Firefox: http://jsfiddle.net/9aE2p/1/hasChildNodes() von Attributknoten zurückgeben unterschiedliche Ergebnisse für Chrome und Firefox

auch den gleichen Code einfügen hier:

var xmlStr = '<?xml version="1.0" encoding="UTF-8"?><abc abc_attr="abc_attr_value"><abc_child abc_child_attr="abc_child_attr_value1"/><abc_child abc_child_attr="abc_child_attr_value2"/></abc>'; 

var parser = new DOMParser(); 
var xmlDoc = parser.parseFromString(xmlStr, "text/xml"); 

var path = 'abc/@abc_attr'; 

var nodes = xmlDoc.evaluate(path, xmlDoc, null, XPathResult.ANY_TYPE, null); 

var result = nodes.iterateNext(); 

while (result) { 
    var textContent = '<BR>result.textContent: "' + result.textContent + '"'; 
    var nodeType = '<BR>result.nodeType: "' + result.nodeType + '"'; 
    var resultHasChildren = '<BR>result.hasChildNodes(): ' + result.hasChildNodes(); 

    document.write(nodeType); 
    document.write(textContent); 
    document.write(resultHasChildren); 

    result = nodes.iterateNext(); 
} 

Was ich zu bemerken ist, dass hasChildNodes() gibt false für Firefox und true für Chrome zurück.

Wenn ein nodeType ein Attributknoten ist, hat er in Chrome einen untergeordneten Knoten, der den tatsächlichen Wert hat. Aber in Firefox hat es keinen Kindknoten und der Wert wird im Attributknoten selbst gespeichert.

Ich bin neugierig zu wissen, gibt es Dokumentation zu diesem feinen Unterschied?

Ich habe bereits die folgenden Dokumente, konnte aber keine solche Besonderheiten nicht finden:

https://developer.mozilla.org/en-US/docs/DOM/Node.hasChildNodes

http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-810594187

+0

interessiert, die Opera stimmte mit Chrome – dmi3y

+0

Vielleicht hat es mit Webkit vs Gecko zu tun. Basiert Opera auf Webkit basiert? – bits

+0

nein, sie haben eigene presto, rate sehr alt – dmi3y

Antwort

2

Wie gerade in meinem Kommentar geschrieben, ich glaube, dies die mit Veränderungen zu tun hat Way-Attribute sind in DOM4 im Gegensatz zur vorherigen Version implementiert.

In früheren Versionen der Attr Schnittstelle Node erweitert. Dies wurde geändert, sodass Sie die Methoden Node nicht mehr verwenden können. Die Eigenschaften name und value sind jedoch weiterhin vorhanden.

0

Selektor

var path = 'abc/@abc_attr'; 

kehrt Attributknoten (Attr), die von der Natur überhaupt nicht untergeordneten Knoten haben könnten, und es gibt Grund für Mozilla-Entwickler (Vermutung) gemacht hasChildNodes() für Attribute veraltet.

Selektors

var path = 'abc[@abc_attr]' 

kehrt Knotenelement (Element)

Beispiel hier:

http://jsbin.com/udugug/1

spec Verbindung, die hier etwas Licht macht:

http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-637646024

Verwandte Themen