JQuery: 如果 href 为空,则隐藏链接

14

我已经忙了一段时间了。基本上,我需要检查类名为.pdf-download的锚点标签上的href是否为空,如果是,则隐藏它。

我已经尝试了几个选项,但都没有成功。以下是我的代码:

$("a.pdf-download").each(function (i) {
  if ($('[href]:empty',this).length == 1) { 
    $(this).hide();
  } else {
    $(this).show();
  }
});

3
嗨,伙计 - 我看到你已经提了三个问题并得到了一些好的答案。请确保通过在最佳答案旁边打勾来将其中一个答案标记为正确答案。这是SO社区的工作方式。您可能还想阅读FAQ - http://stackoverflow.com/faq - mrtsherman
7个回答

28
if ($(this).attr('href') != '') { 
    $(this).hide();
} else {
    $(this).show();
}

请注意,您还可以使用属性选择器在CSS中实现此操作:

a.pdf-download[href='']{
    display:none;
}

不过,这在ie6中不被支持。


5
+1 - 我喜欢这个 CSS 的解决方法。如果你想的话,也可以在 jQuery 中使用同样的选择器。$('a[href=""]').hide(); - mrtsherman
请注意,该jQuery选择器无法隐藏没有href属性的链接标签。 - Elliot Nelson

7
您也可以使用jQuery选择器来完成此操作,如下所示:
// Hide any links with blank href or no href attribute
$('a.pdf-download[href=], a.pdf-download:not([href])').hide();

4

使用此解决方案,即使未定义 href 属性,也能生成所需的结果。如果使用 CSS 选择器(jQuery),则无法检测不存在的 href 属性。

$("a.pdf-download").each(function (i) {
    if (!this.href) { 
        $(this).hide();
    } else {
        $(this).show();
    }
})

不必使用JQuery方法来获取href属性,因为this.href同样易于阅读、更快,并且具有普遍支持。


3
这个东西能行吗?
$("a.pdf-download").each(function (i) {
  if ($(this).attr('href').length == 0) { 
    $(this).hide();
  } else {
    $(this).show();
  }
});

如果元素上设置了href,那么它将起作用,但如果没有设置,则会抛出错误。如果你尝试 $('<a>test</a>').attr('href').length,它将返回 "TypeError: Cannot read property 'length' of undefined",因为 .attr('href') 返回 undefined。我想在大多数情况下这种方法都可以正常工作,但值得注意的是这个细节。 - andyface

1

我自己也是一个jQuery的初学者,但这是我会做的:

$("a.pdf-download").each(function (i) {

    var aHref = $(this).attr('href');

    if (aHref == '' || !aHref) {

        $(this).hide();

    };

});

演示:http://jsfiddle.net/BZq9c/1/


1

1
$("a.pdf-download").each(function() {
    var href = $(this).attr("href");
    if(href == '') {
        $(this).remove();
    }
});

$("a.pdf-download[href='']").remove() 

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