多个选择器不使用上下文

时间:2011-09-13 00:21:59

标签: jquery jquery-selectors

我正在尝试选择焦点时使用的一些表单元素:

$('textarea, input, select', '.highlightRow').live('focusin', function(e){ $(this).css("background-color","yellow"); });

但多个选择器和上下文存在问题

当我使用上下文和表单时没有.highlightRow我的textarea没有更改bgcolor(没关系)但列表中的下一个元素(输入,选择)更改bgcolor(这是错误的)

示例:http://jsfiddle.net/RgEAw/1/

现在只有不那么优雅的解决方案正常工作:

$('.highlightRow input, .highlightRow .highlightRow select, .highlightRow textarea')...

在这种情况下是否有可能使用这个多选择器和上下文?

1 个答案:

答案 0 :(得分:4)

根据jQuery doc,上下文必须是“DOM元素,文档或jQuery”。它本身不能是字符串选择器。

所以,当你指定:

$('textarea, input, select', '.highlightRow')

您显然正在尝试指定'.highlightRow'的上下文,这不是指定上下文的文档化方法之一。在这种特殊情况下,您可以为'.highlightRow'获取单个DOM元素,将其转换为jQuery对象或将其放入实际选择器中。

但是,如果您传递的对象实际存在,则上下文将仅起作用。如果它不存在,那就像你传递一个NULL上下文,这意味着搜索整个文档,这样它就不会做你想要的。因此,您只能在选择器实际存在时使用上下文参数。

我建议使用这个:

$('.highlightRow textarea, .highlightRow input, .highlightRow select')

此处的演示演示:http://jsfiddle.net/jfriend00/uzYuQ/