Kiểm tra jsfiddle này riêng trong Chrome và Firefox: http://jsfiddle.net/9aE2p/1/hasChildNodes() của các nút thuộc tính trả về kết quả khác nhau dành cho Chrome và Firefox
Cũng dán mã tương tự ở đây:
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();
}
Những gì tôi nhận thấy là hasChildNodes() trả về false cho Firefox và đúng đối với Chrome.
Nếu nodeType là nút thuộc tính, thì trong Chrome, nút này có nút con có giá trị thực. Nhưng trong Firefox, nó không có bất kỳ nút con nào và giá trị được lưu trữ bên trong nút thuộc tính.
Tôi tò mò muốn biết liệu có bất kỳ tài liệu nào về sự khác biệt tinh tế này không?
Tôi đã kiểm tra các tài liệu sau nhưng không thể tìm thấy bất kỳ chi tiết cụ thể như:
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
người quan tâm, Opera đã đồng ý với Chrome – dmi3y
Có thể nó liên quan đến Webkit vs Gecko. Opera có dựa trên webkit không? – bits
không, họ có uy tín riêng, đoán rất cũ – dmi3y