jquery attr(name,value)方法的value参数

时间:2011-08-15 17:40:52

标签: javascript jquery

我正在阅读Bibeault的jQuery in Action,我无法理解value方法的attr()参数。书中说参数可以是参数为indexpreviousValue的函数。这些参数的目的是什么?我不明白该文的解释。

具体来说我想知道:

  1. 这些参数是强制性的吗?
  2. 这些参数如何使用的示例是什么?
  3. 我可以在函数中使用其他参数吗?

4 个答案:

答案 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中使用。