我正在阅读Bibeault的jQuery in Action,我无法理解value
方法的attr()
参数。书中说参数可以是参数为index
和previousValue
的函数。这些参数的目的是什么?我不明白该文的解释。
具体来说我想知道:
答案 0 :(得分: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';
});
参数不是强制性的;如果您只是从回调签名中省略它们,那么您根本就无法访问该信息。您无法将其他参数传递给此方法。您可能希望在匹配大量元素时使用此函数,并希望根据其选择器元素的序号位置插入一些数据。
例如:
$('.someElements').attr('rel', function(index, value)
{
return value + index;
});
对于与选择器匹配的每个元素,将rel属性设置为它的内容加上选择器的索引。因此,元素一,如果它具有'sampleRel'的rel,则设置为'sampleRel1',具有rel'ampleRel'的元素二变为'sampleRel2'等等
答案 1 :(得分: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;
});
答案 2 :(得分:0)
attr是一种访问元素属性的方法。允许函数的重载将允许你使用函数return来设置值(函数的索引参数将是选择的索引,previousValue是它到现在为止的值)。
我自己从未使用过这种重载,但假设你根据某种功能制作属性值会很好。
它们不是强制性的,传递不同数量的参数会产生不同的功能:
attr('name') - 获取name
的值attr('name','value') - 设置名称
的值attr('name',function(i,v){return v + i;}); - 将name的值设置为前一个值+集合中的索引。
例如: 假设我们有5个跨度,类别打嗝,并命名为“是”。
$('span.hiccup').attr('name',function(i,v){return v + i;});
将为每个范围命名为'yup1' - 'yup5'。
此外,您可以在函数内部访问此函数,该函数引用元素本身。鉴于此,你可能会做一些非常有趣的事情。
与往常一样,jQuery提供了所有这些的精彩文档: http://api.jquery.com/attr
答案 3 :(得分:0)
在jQuery的documentation中有一个很好的例子,我将在这里缩短:
以下是相关的HTML:
<div>Zero-th </div>
<div>First </div>
<div>Second </div>
如果您随后运行此javascript,它将为每个div应用唯一ID:
$("div").attr("id", function (arr) {
return "div-id" + arr;
});
$
函数返回所有div,因此arr
参数允许您根据索引指定属性值。
传递给attr的函数也收到一个指定旧属性值的值,但由于这是javascript,函数不必命名该参数,它仍然可以在arguments
中使用。