我在閱讀Bibeault的jQuery in Action,並且我很難理解attr()
方法的value
參數。該書說該參數可以是一個函數,其參數是index
和previousValue
。這些參數的目的是什麼?我不明白文中的解釋。jquery attr(name,value)方法的值參數
具體來說,我想知道:
- 難道這些參數強制?
- 什麼是這些參數如何使用的例子?
- 我可以在函數中使用其他參數嗎?
我在閱讀Bibeault的jQuery in Action,並且我很難理解attr()
方法的value
參數。該書說該參數可以是一個函數,其參數是index
和previousValue
。這些參數的目的是什麼?我不明白文中的解釋。jquery attr(name,value)方法的值參數
具體來說,我想知道:
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;
});
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
@ aepheus - 如果你的函數返回一個全新的屬性值?又名沒有previousValue – dopatraman
@codeninja - 可能以前的值將是未定義的。 – aepheus
這其實很簡單。 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'等等
@ Tejs - 所以我不能使用函數來設置一個基於另一個元素位置的* not *的值?這似乎是一種近視... – dopatraman
索引參數只是額外的信息。它與您設置屬性的能力無關。 – Tejs
有一個在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
。
@ Joseph_Silber - 假設我想將屬性設置爲由函數計算的兩個數字之和: '$('div')。attr('sum',function(a,b){return a + b }';' – dopatraman
'$('a')。attr('title',function(){return 12 + 45});'' –