使用JQuery从列表中移除特定元素

11

我有一个动态列表,它看起来像这样:

<ul>
<li class="border" id="tl_1">Text1</li>
<li class="border" id="tl_2">Text2</li>
<li class="border" id="tl_3">Text3</li>
</ul>
  • $("#tl_2").remove()
  • $("li:contains('tl_2')").remove()

What is the correct way to remove an item from the list using JQuery?

$('#tl_2').remove();
或者
$('li').find('tl_1').remove();

我该如何解决这个问题?


1
展示你尝试过的,它应该可以工作... - gdoron
请注意,无需使用id查找元素。id是唯一的。 - gdoron
@Torben,你所说的“dynamic”,是否意味着列表项是通过某种请求动态填充的,可能是在你问题中的代码运行之后? - Frédéric Hamidi
$('#tl_2').remove(); 应该可以正常运行(请参见 http://api.jquery.com/remove/)。如果您用 ul 替换 li,那么第二行代码也可以正常工作:$('ul').find('tl_1').remove(); - T. Junghans
它可以工作:( 我使用了错误的选择器来确定 tl_ 后面的数字... 不过,有没有一种函数可以彻底地删除该项而不仅仅将其设置为“display:none;”? - Torben
remove()会彻底删除该项,而不像hide()那样将其display属性设置为none - Frédéric Hamidi
4个回答

19

可能您有不止一个具有相同ID的元素。

如果您想按索引删除它们,您也可以完全不使用ID,而是使用.eq()方法:

$("#btnRemove").click(function() {
    $("#myList li").eq(1).remove();
});
每次单击将删除第二个列表项。 在线测试案例

11

可能是您犯了一些愚蠢的错误,应该可以工作:

$('#buttonId').click(function(){
        $('#tl_2').remove();
    });

请注意,无需通过寻找元素的id来获取它。因为id是唯一的。

$('li').find('tl_1').remove();  // And you were missing the # anyway...

确保每个id只有一个元素。id就像身份证号码一样... 相同的值只能有一个。

每个文档中必须仅使用一次id值。如果多个元素被分配了相同的ID,则使用该ID的查询将仅选择DOM中第一个匹配的元素。不过,不应依赖此行为;具有多个使用相同ID的元素的文档是无效的。


2

我认为您没有向我们展示代码的某些部分,因为我怀疑您正在动态生成该ID,这意味着您也要动态设置它。您必须确保ID中没有任何空格字符,否则可能会出现问题...

$('#tl_2').remove();

按照jQuery文档的要求工作。对我来说很有效。


1

你的代码其他地方可能有错误,因为你的代码是正确的。

请检查你的错误控制台。

虽然你的第二个例子应该是:

$('ul').find('#tl_2').remove(); // but this isn't really needed since we are selecting by id. So just go for the first example which is faster.

2
可能会有多个具有相同ID的元素,在这种情况下,只会删除第一个。更新的fiddle - Shadow The Spring Wizard
@ShadowWizard 好的判断。那么,OP,在 DOM 中是否有相同 ID 出现多次? - PeeHaa
OP不会在这里收到您的评论通知,请在他的问题下发表评论,这样他就能收到通知并希望得到答案。 :) - Shadow The Spring Wizard
@ShadowWizard。并不是每次都会选择第一个元素,我曾经回答过一个遇到页面刷新问题的人,他的问题是有重复的ID。 - gdoron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接