2012-11-21 3 views
6

Scegli questa jsfiddle separatamente in Chrome e Firefox: http://jsfiddle.net/9aE2p/1/hasChildNodes() di nodi di attributi restituiscono risultati diversi per Chrome e Firefox

incollando anche lo stesso codice qui:

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(); 
} 

Quello che sto notando è che hasChildNodes() restituisce false per Firefox e true per Chrome.

Se un nodeType è un nodo di attributo, in Chrome ha un nodo figlio che ha il valore effettivo. Ma in Firefox, non ha alcun nodo figlio e il valore è memorizzato all'interno del nodo dell'attributo stesso.

Sono curioso di sapere se c'è qualche documentazione su questa sottile differenza?

ho già controllato i seguenti documenti, ma non abbiamo trovato nessuna tali specifiche:

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

interessato, l'Opera concordato con Chrome – dmi3y

+0

Forse ha a che fare con Webkit vs Gecko. Opera è basata sul webkit? – bits

+0

no, hanno proprio presto, indovina uno molto vecchio uno – dmi3y

risposta

2

Come appena pubblicato nel mio commento, credo che questo abbia a che fare con le modifiche al gli attributi di modo sono implementati in DOM4 in contrasto con la versione precedente.

Nelle versioni precedenti l'interfaccia Attr esteso Node. Questo è stato modificato, quindi non è più possibile utilizzare i metodi Node. Tuttavia, le proprietà name e value esistono ancora.