我正在管理Javascript中的名稱列表。當您選中一個框時,您的名字將出現在列表中。當你取消選中時,它會被刪除。當您將框設置爲不確定狀態時,您的名字被刪除。克隆的節點不等於原始節點(使用isEqualNode)
我已經得到了隱藏div中當前登錄用戶的名字。該名稱是具有樣式屬性的跨度。
我檢查名稱是否已經在isEqualNode列表中。當頁面加載時它在列表中,它工作正常:名稱被找到,所以在框檢查狀態改變時更新。
for(var i=0 ; i < bullet.childNodes.length ; i++) {
var node = bullet.childNodes[i];
if(node.className == 'crossed')
node = node.firstChild;
if(node.isEqualNode(document.getElementById('curUser').firstChild))
break;
}
// if i < bullet.childNodes.length, then we found the user's name in the list
當名稱不在列表中時,我克隆了跨度。
var newName = document.getElementById('curUser').firstChild.cloneNode(true);
bullet.appendChild(newName);
這在視覺上起作用。
但我偶然發現了一些棘手的問題:newName.isEqualNode(document.getElementById('curUser').firstChild)
是錯誤的!所以如果箱子狀態再次改變,那麼新添加的名稱將不會被找到,並且會再次創建新的名稱。
這裏是跨度的樣子:
<span style="font-weight: bold ; color: #003380 ;">Pikrass</span>
目前我只會讓檢查不嚴格(我可以檢查,而不是依靠isEqualNode跨度內的文本數據),但根據isEqualNode,我對克隆節點爲何與原始節點不同有所感興趣。
相關規範:cloneNode,isEqualNode
編輯:我與Firefox和鉻測試。使用Firefox isEqualNode返回false,但使用Chromium它將返回true。感謝Felix指出了這一點。
哪個瀏覽器?它似乎在Chrome中工作:http://jsfiddle.net/WhxQP/。 –
有趣的問題。這裏有一個簡化的例子:http://jsfiddle.net/QtJJb/ –
這個小提琴在Firefox 17.x中不起作用。 –