2009-04-30 62 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");