属性上的jquery选择器,值为()

时间:2013-07-16 08:04:49

标签: jquery jquery-selectors

给出以下列表(简化):

<ul id="items">
  <li PK1="1" PK2="abc">value1</li>
  <li PK1="2" PK2="abc">value2</li>
  <li PK1="3" PK2="def(1)">value3</li>
  <li PK1="4" PK2="def(1)">value4</li>
</ul>

<ul id="types">
  <li PK="abc">abc</li>
  <li PK="def(1)">def</li>
</ul>

当用户将鼠标悬停在列表'类型'的列表项上时,列表'items'中的相应项目需要进行直观的更改。

我使用的选择器是:

sCrit += '[pk2=\'' + $(this).attr('pk') + '\']';
$('ul#items li' + sCrit).addClass('Highlight');

在实际示例中,一旦我将鼠标悬停在listitem def上,页面就会崩溃(100%CPU),因为属性中的()(已确认)。 列表'类型'的PK值无法更改,因此不能选择。

似乎jquery解析器正在寻找除属性值之外的其他东西。我能做些什么才能做到这一点?

2 个答案:

答案 0 :(得分:0)

您认为属性选择不正确我认为...我认为您的代码需要像这样..

 var sCrit = '[PK2="' + $(this).attr('PK')+'"]';
 $('#types li' + sCrit).addClass('Highlight');

答案 1 :(得分:0)

试试此代码

var sCrit= '';
$('ul#items li').hover(function(){
  sCrit = '[pk="' + $(this).attr('pk2') + '"]';     
  $('ul#types li' + sCrit).addClass('Highlight');
});

$('ul#items li').mouseleave(function(){
  $('ul#types li' + sCrit).removeClass('Highlight');
});

选中此demo