jquery:如果没有链接,请将#hash添加到所有链接中?

时间:2011-02-25 14:39:16

标签: jquery hash add

嘿伙计们, 以下代码工作正常...我正在为#wpf-wrapper中的所有链接添加#wpf-wrapper哈希。

$('#wpf-wrapper a').live('click',function() {
    $(this).attr('href', $(this).attr('href') + "#wpf-wrapper");        
});

但是,如果有一个链接已经有例如href="#"我不想再添加一个。为什么以下代码不起作用?

$('#wpf-wrapper a').not('#wpf-wrapper a[href="#"]').live('click',function() 
    $(this).attr('href', $(this).attr('href') + "#wpf-wrapper");        
});

突然间我的链接都没有添加#wpf-wrapper?

2 个答案:

答案 0 :(得分:5)

此选择器错误

$('#wpf-wrapper a').not('#wpf-wrapper a[href="#"]')

应使用attribute contains selector并使用正确的:not()选择器

$('#wpf-wrapper a:not([href*="#"])')

答案 1 :(得分:1)

这是另一种方式:

$('#wpf-wrapper a').each(function(){ 
    if( !this.hash ) this.hash = "#wpf-wrapper";
});

您可以使用hash元素上的原生a属性来设置它,而不是使用jQuery的.attr()方法。


如果您在点击处理程序中执行此操作的原因是.each()不起作用,则可能是您在加载DOM之前运行代码。

如果是这样,请执行以下操作:

$(function() {
    $('#wpf-wrapper a').each(function(){ 
        if( !this.hash ) this.hash = "#wpf-wrapper";
    });
});

如果您要动态创建元素,请在创建时添加哈希值。