javascript - ReplaceChild() 应该如何工作?

标签 javascript

我正在自学 javascript,但不明白从一些示例代码中得到的结果。为了简洁起见,我已经删减了代码。

HTML:

<body>
        <h1>firstChild and lastChild Property Lab</h1>
        <hr />
        <form>
            <label>Enter some text to add or replace in the OL element:</label>
            <br />
            <input type="text" name="input" size="50" />
            <br />
            <input type="button" value="Insert at Top"
                    onclick="prepend(this.form)" />
            <input type="button" value="Append to Bottom"
                    onclick="append(this.form)" />
            <br />
            <input type="button" value="Replace First Item"
                    onclick="replaceFirst(this.form)" />
            <input type="button" value="Replace Last Item"
                    onclick="replaceLast(this.form)" />
        </form>
        <ol id="myList">
            <li>Initial Item 1</li>
            <li>Initial Item 2</li>
            <li>Initial Item 3</li>
            <li>Initial Item 4</li>
        </ol>
    </body>

JavaScript:

// helper function for prepend() and append()
function makeNewLI(txt)
{
    var newItem = document.createElement("LI");
    newItem.innerHTML = txt;
    return newItem;
}

function replaceFirst(form)
{
    var newItem = makeNewLI(form.input.value)
    var firstLI = document.getElementById('myList').firstChild.value;
    document.getElementById('myList').replaceChild(newItem, firstLI);
}

我想如果我在文本框中输入一些文本并单击“替换第一项”按钮,列表中的第一项将被替换。然而,我第一次这样做时,它被添加到列表的顶部,并且列表现在有 5 个项目。然后,如果我更改文本框中的文本并再次单击“替换第一项”按钮,列表中的第一项就会更改。

我不明白为什么会发生这种情况。我预计每当我单击按钮时就会发生替换。我正在 Ubuntu 10.04 上使用 Firefox 4。另外,如果我尝试替换列表中的最后一项,结果与我上面概述的相同。

谢谢吉姆

最佳答案

有两处错误。首先,您选择value而不是 var firstLI = document.getElementById('myList').firstChild.value; 的元素所以使用var firstLI = document.getElementById('myList').firstChild;相反。

其次,不管你信不信你的 firstChildTextNode带有当前标记的空文本。删除 <ol> 之间的空白和第一个<li>这样它 <ol><li>.... ,就像这里:

http://jsfiddle.net/niklasvh/5anyq/

关于javascript - ReplaceChild() 应该如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6441887/

相关文章:

javascript - NodeList对象的length属性只读,如何验证?

javascript - 隐藏 body 点击,除了项目 id = 某事

javascript - 将 7 张图像合并为一张,一张叠加在一起并输出为单张图像?

javascript - Chosen.js 不能很好地与 Angular 指令配合使用

javascript - 使 &lt;script&gt; append 到正文后立即工作?

javascript - 带有 javascript window.location 的 html 表单不起作用

javascript - 点击div动态创建

javascript - 未添加完整日历资源额外参数

javascript - 在 iPhone 上播放 HTML5 Canvas 动画 onClick 或 onTouchEnd

javascript - Node.js : request js multipart 2nd level file and JSON. 字符串化