2011-01-05 68 views
1

如果我经常引用:如何在jQuery中缓存变量?

$('#' + n + ':nth-child(2)').val() 

然后我怎么缓存$( '#' + N)为变量?

$n = $('#' + n); 
$n:nth-child(2) 
+0

'n'的值是多少?它只是简单的ID吗?它是否包含尾随空格字符?这些细节将会有所作为。 – user113716 2011-01-05 21:50:16

回答

1

另一种方式:

$n = $('#' + n); 
$n.find(":nth-child(2)"); 
+0

如果'n'只是一个类似''myID''的ID,那么原始选择器看起来像'“#myID:nth-​​child(2)”',它不包含*后代选择器*。在这种情况下,使用'.find()'与原始文件不同。如果不知道'n'的价值,我们无法确定地知道。 – user113716 2011-01-05 21:56:32

+0

我觉得我更喜欢这个解决方案,因为它更加自我记录。选择器在做什么更明显。 – 2011-01-06 15:49:52

6

试试这个:

var $n = $('#' + n); 
var $child = $(":nth-child(2)", $n); 
+0

OP的注意事项:您会在代表jQuery对象的变量前面看到$。这是一个很好的约定。 – ScottE 2011-01-05 21:43:17

+1

个人而言,我讨厌jQuery对象变量前面的$。也许它只是让我想起了太多的PHP。 – 2011-01-05 21:49:24

+0

由于[jQuery实现选择器上下文](http://api.jquery.com/jquery/#selector-context)的方式,使用'$($ n).find(':nth-​​child( 2)');'尽管我怀疑这种差异可能很小,至多。 – 2011-01-05 21:54:07

1

您需要使用.filter(),这在jQuery对象的根,而不是.find()或选择适用于元素上下文参数,它在根元素内部进行搜索。

这是假设,在你的问题最初选择的计算结果为类似:

$('#someID:nth-child(2)') 

如果是,它会关心我一点,因为应该只有一个元素与someID

要给出更确定的答案,我们需要知道n的值。

+0

使用.filter()不一定会返回与原始选择器相同的结果,因为它不包含子元素。对“second”的后续操作可能与对原始$ n的操作不一样。 – 2011-01-05 21:51:28

+0

@jamietre:除非结构发生变化,否则它是一样的。 “#+ n”元素是“:n-child(2)”,否则不是。当页面上只有一个元素时,在一个元素上指定'nnth-child'是很奇怪的。 – user113716 2011-01-05 21:54:13

+1

当你的评论出现时,我正在慢慢地理解这个理解:)当然,我一直在考虑更多的问题,而不是在第十一个孩子的情况下。 – 2011-01-05 21:56:44