【问题标题】:finding a li with specific title and removing the rest li找到具有特定标题的 li 并删除其余的 li
【发布时间】:2012-01-26 17:33:40
【问题描述】:

我有一个列表,我需要在页面加载时选择一个元素(根据<li> 内的<a> 的标题属性)并删除除所选元素之外的其余列表元素。

使用这个:

$("#div").find("a[title='Previous Page']").not(this).remove();

它不工作。

http://jsfiddle.net/ymhrF/16/

【问题讨论】:

    标签: jquery jquery-selectors dom-traversal


    【解决方案1】:

    我会遵循的逻辑是:

    • 获取所有列表元素 (li)
    • 选择那些没有具有指定标题的孩子a 的人(使用filter 方法很容易,我真的建议您熟悉它)
    • 删除选中的一个

    您可以完成此计划的一种方法是:

    $('#list li')
        .filter(function () {
            return !$(this).has('a[title="Previous Page"]').length;
        })
        .remove();
    

    您可以通过多种方式编写过滤函数(使用find() 而不是has() 或使用某种组合选择器),但我真的认为您应该使用filter()。它使您的代码更具可读性,并且可以很好地描述实际发生的情况。

    jsFiddle Demo

    【讨论】:

      【解决方案2】:
      $("#custom_pagination").find("a").not('[title="umm"]').parent('li').remove();
      

      如果您想将其保留为一行代码。

      【讨论】:

        【解决方案3】:
        $("li")
            .each(function(){
                if( $(this).find("a").is("[title='yourTitle']") ){
                    $(this)
                        .siblings()
                        .remove();
                }
            });
        

        Example.

        或者你可以更简单一点:

        $("li")
            .find("a[title='yourTitle']")
            .parent()
            .siblings()
            .remove();
        

        Example.

        但这仅适用于存在单个 a 标记且标题属性为 yourTitle(或您决定查找的任何标题)的情况。

        【讨论】:

        • 是的,它可以工作,但是如果没有与标题匹配的元素,则结果会显示整个列表
        • 只需将else 添加到if 即可删除所有li 元素。
        猜你喜欢
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多