2009-04-30 64 views
0

在一个类中的属性我想要查询参数追加到一个类中的文本块内的链接,如附加文本匹配元件jQuery中

<div class="container"> 
consectetur <a href="foo.php?q=bar">adipisicing</a> 
</div> 

其中Q =栏追加。 这里是我的功能:

function appendRef(container,reftag) { 
    var Link = $(container).attr("href"); 
    var afterLink = reftag; 

     $(container).attr({ 
      href: (Link + afterLink) 
      }); 
} 


appendRef(".container a", "?q=bar"); 

然而,这种转换通过它看到的,而不是唯一处理它们的第一个返回值的专区内的每一个环节。我也希望能够根据部分原始网址过滤该功能。像

if Link.match(/domain/) { //append the param 
} 

回答

0

事情是,你是链接变量设置为静态值(第一HREF的一个)。

你不得不查询储存在这样的变量:

var links = $("." + container + " a"); 

所以链接将是一个数组,那么你可以遍历它和文本追加到它的href

0

我自己并不是一个jQuery人,但我知道css选择器会返回一个结果数组。解决方案只是遍历元素并应用所需的更改。此外,如果您想限制受影响的网址,我向该功能投放了一个可选match属性,以测试href

function appendRef(container,reftag, match) { 
     match = match || /.*/ 
     $(container).each(function() { 
      if ($(this).attr('href').match(match)) { 
       //do url magic here 
      } 
     }) 
} 
2

正如已经指出的那样已经当你设置你的函数的开头链接变量需要由您选择返回的集合中的第一个元素的值。在更新之前,您需要为集合中的每个元素计算href。

您可以通过在闭包中调用.each和使用.attr来做到这一点,或者您可以使用接受回调的attr版本,并允许您逐个元素地执行逻辑...

$(".container a").attr("href", 
    function(idx) { //idx is the index of the element in the set 
     return this.href.match(/domain/) ? this.href + afterLink : this.href; 
    } 
); 
+0

神圣的废话,我不敢相信我不知道attr可以采取这样的回调。尼斯。 – 2009-04-30 19:26:31

0

太棒了,所有。 我在此基础上构建的,并且对其进行了修改,因此如果原始链接已经有一个参数,它会将其取出并替换为新参数。

function appendRef(container, reftag, match) { 
$(container).each(function() { 

    if ($(this).attr('href').match(match)) {     
     var href = $(this).attr('href');     
     var href = href.replace(/\?.*$/,''); 
     var href = (href + reftag); 
     $(this).attr('href', href);   

    } 
}); 
} 

appendRef(".container a", "?q=foo", "domain");