jQuery attr似乎没有返回字符串?

时间:2012-10-22 13:55:17

标签: javascript jquery

我有以下代码:

JS:

var test2 = ['RMrpi5Z8doc','JIPbUaqyYx0','MbjXYg0YRmw'];

    $('tr').live('click', function(event){
      $($(this).attr('class').split(' ')).each(function() { 
        if (!((this == 'even') || (this == 'odd'))) {
            alert(jQuery.inArray(this, test2));
            if (this == 'RMrpi5Z8doc') {
              alert(this);
            }
        }   
      });
    });

HTML:

  <table>
   <tr class="odd RMrpi5Z8doc">
     <td>Kite</td>
     <td>Just Like Vinyl</td>
     <td>Audiotree</td>
   </tr>
  </table>

inArray不匹配并返回-1。与文字字符串匹配的if语句匹配。如果我在inArray的文字中替换,那也匹配。

我看过一篇帖子,说jQuery attr不再返回字符串,但是查看jQuery网站上attr的文档似乎就是这样说的。

也许我应该以完全不同的方式来解决这个问题?

3 个答案:

答案 0 :(得分:5)

你使用了错误的each。你的意思是jQuery.each,通用迭代器:

$.each($(this).attr('class').split(' '), function ...);

不是each,jQuery实例上的实例函数:

$($(this).attr('class').split(' ')).each(function ...); // Wrong

特别是,正在发生的事情是上述部分:

$($(this).attr('class').split(' '))

...使用数组调用$(),这不符合您的要求。 : - )

答案 1 :(得分:1)

我使用以下方法重构了这个:

$(document).on('click', 'tr', function(){
  alert(jQuery.inArray($(this).attr('id'), test2));
}

这似乎有效。我已将类名移动到id字段,因为我没有将这些标识符用于任何样式表,它们确实是ID。

答案 2 :(得分:0)

这确实是一种类型不匹配。如果切换到if (this === 'RMrpi5Z8doc') {,则第二个警报将不再触发。使用this.toString()将解决此问题,如下所示:

$.each($(this).attr('class').split(' '), function() { 
    //...etc.

顺便说一下,这是一种不寻常的方式。通常,您将使用hasClass方法测试类:

$('tr').on('click', function() {
    if ($(this).hasClass('odd')) {
        //...

另外,正如raina77ow所说,有:even:odd伪类:

$('tr').on('click', function() {
    if ($(this).is(':odd')) {
        //...

这样,您可以完全取消oddeven个课程。