按文本和属性选择元素

时间:2016-04-07 12:19:49

标签: jquery

简单的问题:为什么这不起作用?

if ($('a:contains("some text"):first').attr("class") == "someclass") { 
    this.css('background-color', 'red');  
}

1 个答案:

答案 0 :(得分:2)

  

this应该参考< a>第一行中找到的元素。

不幸的是,这不是this关键字的范围有效的方式。在这种情况下,this将引用此代码放置位置的包含范围。要执行您需要的操作,您需要直接引用a元素。试试这个:

var $a = $('a:contains("some text"):first');
if ($a.attr("class") == "someclass") { 
    $a.css('background-color', 'red');  
}

另请注意,如果所选的a元素具有多个类,则上述操作将失败。要解决这个问题,您可以使用jQuery的hasClass()方法:

var $a = $('a:contains("some text"):first');
if ($a.hasClass("someclass")) { 
    $a.css('background-color', 'red');  
}

或者,更好的是,您可以直接通过您正在查找的类选择元素,而无需if语句。

$('a.someclass:contains("some text"):first').css('background-color', 'red');  

最后请注意,最好在单独的样式表中定义样式规则,然后使用addClass()在JS中需要添加这些类,而不是使用.css()临时添加它们。< / p>