2012-11-21 14 views
6

चेक इस jsfiddle अलग से Chrome और Firefox के लिए अलग-अलग परिणाम देते हैं: http://jsfiddle.net/9aE2p/1/hasChildNodes() विशेषता नोड्स के क्रोम और फ़ायरफ़ॉक्स में

इसके अलावा यहां एक ही कोड चिपकाने:

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

मैं क्या देख रहा हूँ कि है हैChildNodes() फ़ायरफ़ॉक्स के लिए झूठा रिटर्न और क्रोम के लिए सच है।

यदि nodeType एक विशेषता नोड है, तो क्रोम में इसका एक बच्चा नोड होता है जिसमें वास्तविक मूल्य होता है। लेकिन फ़ायरफ़ॉक्स में, इसमें कोई भी बच्चा नोड नहीं है और मान विशेषता नोड के अंदर ही संग्रहीत किया जाता है।

मुझे यह जानकर उत्सुकता है कि इस सूक्ष्म अंतर पर कोई दस्तावेज है?

मैं पहले से ही निम्नलिखित दस्तावेजों की जाँच की, लेकिन किसी भी तरह के विशेष नहीं पा सके:

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

दिलचस्पी रखने वाला, ओपेरा क्रोम – dmi3y

+0

के साथ सहमत हो सकता है शायद इसे वेबकिट बनाम गेको के साथ करना होगा। ओपेरा वेबकिट पर आधारित है? – bits

+0

नहीं, उनके पास अपना प्रतिष्ठा है, बहुत पुराना अनुमान है – dmi3y

उत्तर

2

के रूप में सिर्फ मेरी टिप्पणी में तैनात, मेरा मानना ​​है कि इसमें कोई बदलाव के साथ क्या करना है पिछले संस्करण के विपरीत डीओएम 4 में तरीके विशेषताओं को लागू किया जाता है।

पिछले संस्करणों में Attr इंटरफ़ेस Node बढ़ाया। यह बदला गया था ताकि आप अब Node विधियों का उपयोग न कर सकें। हालांकि, name और value गुण अभी भी मौजूद हैं।

0

चयनकर्ता

var path = 'abc/@abc_attr'; 

रिटर्न नोड (ATTR) है, जो स्वभाव से बिल्कुल बच्चे नोड्स है नहीं कर सका विशेषता है, और वहाँ मोज़िला डेवलपर्स (अनुमान) के लिए कारण hasChildNodes बनाया() गुण के लिए हटा दिया है।

चयनकर्ता

var path = 'abc[@abc_attr]' 

रिटर्न नोड तत्व (तत्व)

यहाँ नमूना:

http://jsbin.com/udugug/1

कल्पना लिंक जो यहाँ पर थोड़ा प्रकाश में आता है:

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