2011-08-15 101 views
1

我在閱讀Bibeault的jQuery in Action,並且我很難理解attr()方法的value參數。該書說該參數可以是一個函數,其參數是indexpreviousValue。這些參數的目的是什麼?我不明白文中的解釋。jquery attr(name,value)方法的值參數

具體來說,我想知道:

  1. 難道這些參數強制?
  2. 什麼是這些參數如何使用的例子?
  3. 我可以在函數中使用其他參數嗎?

回答

2

1)在JavaScript中沒有參數是強制性的。你使用任何你想要的數量。這些參數在您的功能中可用。

2)例子:

比方說,你有這樣的HTML:

<a href="#" title="Google"></a> 
<a href="#" title="Yahoo"></a> 
<a href="#" title="Bing"></a> 

現在,運行這段代碼:

$('a').attr('title', function(index, previousValue){ 
    return previousValue + ' - An external link'; 
}); 

這將添加字符串 「 - 外部鏈接」到每個標題的結尾。

現在,看看這個:

$('a').attr('title', function(index, previousValue){ 
    return previousValue + ' - Link number ' + index; 
}); 

這將導致下面的HTML:

<a href="#" title="Google - Link number 0"></a> 
<a href="#" title="Yahoo - Link number 1"></a> 
<a href="#" title="Bing - Link number 2"></a> 

正如你所看到的,你可以看到,這些參數是非常方便的。

3)不確定你的意思是使用其他參數。請澄清。


看起來您並不熟悉Javascript的範圍查找鏈。您不必顯式傳遞參數給函數。如果他們在它上面的範圍正在定義,功能將有機會獲得它:

var num1 = 23; 
var num2 = 54; 

$('a').attr('title', function(){ 
    return num1 + num2; 
}); 
+0

@ Joseph_Silber - 假設我想將屬性設置爲由函數計算的兩個數字之和: '$('div')。attr('sum',function(a,b){return a + b }';' – dopatraman

+0

'$('a')。attr('title',function(){return 12 + 45});'' –

0

attr是一種訪問元素屬性的方法。允許函數的重載將允許您使用函數return來設置該值(函數的索引參數將作爲選擇的索引,previousValue是其到目前爲止的值)。

我從來沒有用過這個重載,但假設如果你根據某種函數做屬性值,它會很好。

他們是不是強制性的,通過不同數量的參數給出了不同的功能:

ATTR( '名') - 獲取名稱

ATTR( '名', '值')的值 - 套名稱的值

attr('name',function(i,v){return v + i;}); - 將名稱的值設置爲之前的值+集合中的索引。

例如: 可以說我們有五個班級打嗝和名稱'yup'。

$('span.hiccup').attr('name',function(i,v){return v + i;}); 

會給每個跨度命名'yup1' - 'yup5'。

此外,您可以訪問這個函數內部的元素本身。鑑於此,你可能會做一些非常有趣的事情。

與往常一樣,jQuery有這一切真棒文檔: http://api.jquery.com/attr

+0

@ aepheus - 如果你的函數返回一個全新的屬性值?又名沒有previousValue – dopatraman

+0

@codeninja - 可能以前的值將是未定義的。 – aepheus

2

這其實很簡單。 attr()函數有三種可能的模式;你引用的那個人需要回調來獲取值。

例如:

$('.someClass').attr('rel', function(index, value) 
{ 
     // index refers to the elements index of the set; so of all elements with the 
     // css class 'someClass', the index will refer to that position in the list. 
     // If three elements match, the callback will be invoked 3 times, with 0, 1, 2 
     // as the index when each element, respectively, is invoked. 

     // value refers to the current value of the attribute. 

     // Return the value you want to set. 
     return 'SomeRelValue'; 
}); 

的參數是不是強制性的;如果您只是從回調簽名中省略它們,則根本無法訪問該信息。您無法將其他參數傳遞給此方法。如果要匹配很多元素,並且希望根據selector元素的序數位置插入一些數據,則可能需要使用此函數。

例如:

$('.someElements').attr('rel', function(index, value) 
{ 
     return value + index; 
}); 

每個元素的選擇匹配,設置rel屬性來這是什麼加選擇的指數。所以元素一,如果它有一個rel'sampleRel',設置爲'sampleRel1',元素二與rel'sampleRel'變成'sampleRel2'等等

+0

@ Tejs - 所以我不能使用函數來設置一個基於另一個元素位置的* not *的值?這似乎是一種近視... – dopatraman

+0

索引參數只是額外的信息。它與您設置屬性的能力無關。 – Tejs

0

有一個在jQuery的documentation,我將縮短在這裏一個很好的例子:

以下是有關HTML:

<div>Zero-th </div> 
<div>First </div> 
<div>Second </div> 

如果然後運行這個JavaScript它會應用唯一的ID給每個格:

$("div").attr("id", function (arr) { 
    return "div-id" + arr; 
}); 

$函數返回所有的div,因此arr參數允許您根據索引指定屬性值。

也傳遞到屬性的功能收到一個值,指定舊的屬性值,但因爲這是JavaScript的功能並沒有說出這樣的說法,它仍然可以在arguments

相關問題