我可以在Jquery中组合变量和选择器吗?

Sam*_*Sam 7 jquery

说我有这个HTML:

<div class="top">top
    <div class="middle">middle
        <div class="bottom">bottom</div>
    middle</div>
top</div>
<div class="middle">outside middle</div>
Run Code Online (Sandbox Code Playgroud)

有没有办法为选择器创建变量,然后将其用作另一个选择器的一部分?这就是我想要做的,但这不起作用:

$top = $('.top');

$($top + ' .middle').click(function(){
    $(this).toggleClass('green');
});
Run Code Online (Sandbox Code Playgroud)

我确定我不需要重新选择.top就像变量那样,所以我确定我需要用$ top做点什么,我只是不确定是什么.

http://jsfiddle.net/ftXLx/1/

Den*_*ret 19

使用

$('.middle', $top)
Run Code Online (Sandbox Code Playgroud)

要么

$top.find('.middle')
Run Code Online (Sandbox Code Playgroud)

你也可以简单地组合选择器,它们是字符串

$($top.selector + ' .middle')
Run Code Online (Sandbox Code Playgroud)

但这只会更慢,更不易读......

  • find比上下文更快 (2认同)
  • @Neil,上下文格式是`.find()`的简写,就像`$(function(){})`是`$(document).ready(function(){})的简写一样. .担心速度的微小差异是过早优化的一种练习. (2认同)

Bru*_*oLM 5

您可以使用 find()

描述:获取当前匹配元素集中每个元素的后代,并通过选择器,jQuery对象或元素进行过滤。

$top.find(".middle");
Run Code Online (Sandbox Code Playgroud)