正确定义jquery attr变量的方法吗?

时间:2016-04-27 23:05:27

标签: jquery variables attr

有人可以解释为什么这段代码不起作用

$(document).ready(function( ) {
 $('a').each(function() {
    var linkhref = $('a').attr('href');   
    if (linkhref == '/second2.php'){   
    $(this).css('color','red');   
    }   
    });   
    }); 

如果我将第三行更改为

 var linkhref = $(this).attr('href');

它运行。这两个var字符串相同吗?

2 个答案:

答案 0 :(得分:1)

使用选择器时

var $a = $('a');

$a将是所有a DOM元素的数组。

你可以这样做:

var $a = $('a');
$.each($a, function(indexOfArray, element) {
  if (element.href == '/second2.php') {
    $(element).css('color','red');
  }
});

https://api.jquery.com/each/

或者:

$(document).ready(function() {
 $('a').each(function() {
   var $a = $(this);
   if ($a.attr('href') == '/second2.php') {
     $a.css('color', 'red');
   }
 });
});

您希望最小化使用选择器的次数,因此请指定$a

答案 1 :(得分:1)

在循环的上下文中,您需要在迭代时维护对数组当前元素的引用,因为您希望更新数组的每个元素。

当您使用$('a').attr('href');时,该行将为页面中的a元素调用另一个搜索(在执行时)并返回{{1}在页面上找到的第一个锚元素的属性。因此,您将在迭代时丢失对数组变量的引用。

出于同样的原因,使用href工作正常。