Javascript 隐藏<;李>;当href为空时

Javascript 隐藏<;李>;当href为空时,javascript,jquery,html,hide,Javascript,Jquery,Html,Hide,我想在.社交菜单中隐藏任何具有空白HREF的LI 我最初有: $('ul.social-menu li a[href*=""]').hide(); 但它只隐藏了链接 我想也许我可以用: $('ul.social-menu li a[href*=""]').addClass('hidden') 但它并没有添加隐藏的类 HTML是: <ul class="social-menu"> <li class="facebook"><a target="parent"

我想在.社交菜单中隐藏任何具有空白HREF的LI

我最初有:

$('ul.social-menu li a[href*=""]').hide();
但它只隐藏了链接

我想也许我可以用:

$('ul.social-menu li a[href*=""]').addClass('hidden')
但它并没有添加隐藏的类

HTML是:

<ul class="social-menu">
   <li class="facebook"><a target="parent" href=""></a></li>
   <li class="twitter"><a target="parent" href="http://twitter.com/#!/dft_au">Twitter</a></li>
</ul>
这项工作:

$('ul.social-menu li').has('a[href=""]').hide();

我编译了这个小程序来说明您的场景。您正在使用“contains”选择器(*=),这意味着它正在查找一个不包含任何内容的href。只需使用“=”使用或选择包含锚定的所有
  • 元素(
    尽管
    :has()),即可显式测试空href
    的可读性稍高。

    作为
    .has的替代品
    /
    :has
    在我的选项中更简单、更有效的是
    .parent()
    (或者
    最近的(“li”)
    ,如果
    li
    不是链接的直接父链接):

    $('ul.social-menu li:has(a[href=""])').hide();
    
    (也不要忘记使用
    href=“”
    而不是
    href*=”

    编辑:效率更高:


    这将仅隐藏
    。而不是
  • 查看我的答案。您需要使用
    has
    选择器。您的选择器仅隐藏
    锚定。性能似乎取决于浏览器。我的Chrome 18执行
    :has
    选择器的速度更快。@RoToRa它还取决于DOM结构。我的m在我的测试用例中使用的可能与OP使用的不同,这可能会影响结果。它看起来要快得多!
    $('ul.social-menu li:has(a[href=""])').hide();
    
    $('ul.social-menu li a[href=""]').parent().hide();
    
    listItems = ​$('ul li a');
    
    $.each(listItems, function() {
      if($(this).attr('href') == '') {
        $(this).parent().remove();
      } 
    });​