gpt4 book ai didi

javascript - 使用 JavaScript 删除特定的
  • 元素
  • 转载 作者:可可西里 更新时间:2023-11-01 02:57:03 26 4
    gpt4 key购买 nike

    该函数似乎不会删除包含指定值的 Node,除非它是第一个值(在本例中为“apples”)。 for 循环还必须在删除任何类型之前执行两次。为什么?

    function removeSpec()
    {
    var query = document.getElementById('spec').value; /* Value inputted by user */
    elements = document.getElementsByClassName('fruit'); /* Get the li elements in the list */
    var myList = document.getElementById("myList3"); /* Var to reference the list */
    var length = (document.getElementsByClassName('fruit').length); /* # of li elements */
    var checker = 'false'; /* boolean-ish value to determine if value was found */

    for(var counter = 0; counter < length; counter ++)
    {
    if (elements[counter].textContent == query )
    {
    alert("Counter : " + counter);
    myList.removeChild(myList.childNodes[ (counter) ]);
    checker="true";
    }
    }
    if ( checker == "false")
    {
    alert("Not Found");
    }
    }

    对应的HTML:

      <ul id="myList3">
    <li class="fruit" >Apples</li>
    <li class="fruit" >Oranges</li>
    <li class="fruit" >Banannas</li>
    <li class="fruit">Strawberry</li>
    </ul>
    <form>
    Value: <input type="text" name="" value="" id="spec">
    <br><br>
    </form>
    <button type="button" style="height:20px;width:200px" href="javascript:void(0)" onclick="removeSpec()" >

    Remove Specified
    </button>

    最佳答案

    childNodes返回一个包含所有 个子节点的列表。这包括文本节点。每 <li> 之间元素,您有一个包含空格和换行符的文本节点。所以,childNodes返回一个包含 9 个节点的列表,但您假设列​​表包含 4 个节点 ( document.getElementsByClassName('fruit').length )。

    你可以使用 .children 而不是 .childNodes . .children返回仅包含元素节点的列表。或者更好的是,使用 elements ,因为这就是您要迭代的内容。

    您还需要在找到删除的节点后停止迭代,否则您将尝试访问不再存在的位置。

    function removeSpec()
    {
    var query = document.getElementById('spec').value; /* Value inputted by user */
    elements = document.getElementsByClassName('fruit'); /* Get the li elements in the list */
    var myList = document.getElementById("myList3"); /* Var to reference the list */
    var length = (document.getElementsByClassName('fruit').length); /* # of li elements */
    var checker = 'false'; /* boolean-ish value to determine if value was found */

    for(var counter = 0; counter < length; counter ++)
    {
    if (elements[counter].textContent == query )
    {
    myList.removeChild(myList.children[ (counter) ]);
    // better: myList.removeChild(elements[counter]);
    checker="true";
    break;
    }
    }
    if ( checker == "false")
    {
    alert("Not Found");
    }
    }
    <ul id="myList3">
    <li class="fruit" >Apples</li>
    <li class="fruit" >Oranges</li>
    <li class="fruit" >Banannas</li>
    <li class="fruit">Strawberry</li>
    </ul>
    <form>
    Value: <input type="text" name="" value="" id="spec">
    <br><br>
    </form>
    <button type="button" style="height:20px;width:200px" href="javascript:void(0)" onclick="removeSpec()" >

    Remove Specified
    </button>


    还有其他可以改进的地方(例如,为什么不为 checker 分配一个实际的 bool 值?),但它们与您的问题无关。

    关于javascript - 使用 JavaScript 删除特定的 <li> 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41421709/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com