JQuery变量在选择器中没有字符串连接

时间:2010-11-10 12:02:53

标签: javascript jquery jquery-selectors

我正在编写大量代码,我使用的是相同的选择器,但是它们的代码段为例如

$('#menu > div.container a')

$('#menu span.highlight')

有没有方法在变量中加上'#menu'并使用它?我对字符串连接的问题在于它需要对其使用进行极端的训练,因为即使单个丢失的空间也会使事情变得混乱。我宁愿做的事情如下:

var menuSelector = '#menu';
$('{menuSelector} > div.container a')
$('{menuSelector} span.highlight')

我检查了文档,但这样的功能不存在。实现这样一个特性的问题是jQuery需要在调用者的上下文中进行评估。这可能在JavaScript中吗?其次,我如何自己实现此功能?

5 个答案:

答案 0 :(得分:6)

使用节点缓存,以便更快地评估节点(从缓存的上下文开始搜索)

$menu = $('#menu');

$menu.children('div.container a')
$menu.find('span.highlight');

答案 1 :(得分:4)

这应该有效

var menuSelector = '#menu';
$(menuSelector + ' > div.container a')
$(menuSelector + ' span.highlight')

答案 2 :(得分:4)

如果要避免字符串连接,可以使用

实现此目的
var menuSelectorObj = $('#menu');
$('div.container a',menuSelectorObj);
$('span.highlight',menuSelectorObj);

答案 3 :(得分:1)

不确定

var menuSelector = '#menu';
$(menuSelector +  ' > div.container a')
$(menuSelector +  ' span.highlight')

请注意,变量使用+运算符与其他sting连接。

您应该在每行末尾添加;,以防您缩短脚本以获得更快的效果,并且良好做法一般:

var menuSelector = '#menu';
$(menuSelector +  ' > div.container a');
$(menuSelector +  ' span.highlight');

更多信息:

答案 4 :(得分:0)

如果你想连结字符串 - 确定你可以:

var prefix = '#menu';

$(prefix + ' span')....

但是如果你想查询属于'#menu'节点的子元素的DOM元素 - 更好地缓存这个节点并将其用作起点:

var $menu = $('#menu') //very fast - uses native getElementById()
$menu.find('.highlight') //you do not need to specify <span>.
                         //only if you _really_ need to find <span class="highlight">

$('.highlight', $menu) //same as above - its shortcut for $elem.find()

$menu.children('.container').find('a') //not tested but maybe little faster than
                                       //child selector you use - '#menu > div.container a'

HTH