在DOM操作後,我在Firefox中看到奇怪的行爲。更改TextNode的內容不會改變其屬性。例如。刪除一個字符不會更新textContent的長度。DOM操作後TextContent長度不會改變
下面是HTML
<p>Input:</p>
<div> <span id="cursor"></span></div>
<p>Results:</p>
<ul id="result"></ul>
和JavaScript
var cursor = document.getElementById("cursor"),
result = document.getElementById("result");
window.addEventListener('keydown', function(e) {
//Backspace event
if (e.which == 8) {
cursor.previousSibling.textContent = cursor.previousSibling.textContent.substring(0, cursor.previousSibling.textContent.length - 1);
}
}, true);
//Capture key press and write character to TextNode
window.addEventListener('keypress', function(e) {
cursor.previousSibling.textContent = cursor.previousSibling.textContent + String.fromCharCode(e.which);
}, true);
測試此代碼在http://jsfiddle.net/dx7Dy/9/
在Chrome中它能正常工作,您鍵入的DIV充滿信。退格鍵刪除最後一個字符。
在Firefox中,第一個退格之後,最後一個字符被刪除,但TextNode的textContent長度未更新。
刪除TextNode(包括node.remove()和parentNode.removeChild(節點))時,我已經看到了同樣的問題。它的內容被清空,但節點仍然在DOM中,所以下一個remove()只是試圖刪除同一個空節點,並將其留空並再次放置。
這隻發生在通過事件偵聽器觸發時。例如,如果我通過Firebug控制檯操縱DOM,則一切都按預期工作。
這是Firefox代碼中的錯誤嗎?
你說得對。這是一個工作小提琴:http://jsfiddle.net/dx7Dy/13/ Pozdrav! – jeremija