2014-02-05 116 views
1

我需要帮助理解为什么这些东西的行为奇怪:jQuery选择的烦恼

alert($('div.entry').text());     returns some long text 
alert(Thesaurus.options.containers);   returns string div.entry 
alert($(Thesaurus.options.containers).text()); breaks with Uncaught RangeError: Maximum call stack size exceeded 

的HTML有下几个div.entry元素500个字。

的Thesaurus.options.containers看起来是这样的:

jQuery.Thesaurus({ 
     caseSentitive: false, 
     zetind: 'auto', 
     delay: 250, 
     containers: ['div.entry'], 
     effect: 'slide', 
... 
+1

如果你叫什么'$(Thesaurus.options.containers [0])文本()' –

+0

硬盘没有看到你使用这个对HTML进行调试。 – j08691

+0

最好使用'console.log()'而不是'alert()'。 'console.log()'会告诉你'Thesaurus.options.containers'包含一个单个字符串的数组。 'alert()'用逗号加入了数组中的值,在你的情况下它看起来像是一个字符串。 –

回答

1

所以,基本上,你这样做是:$(['div.entry]).text();我猜,因为你传递你调用这样的数组: http://api.jquery.com/jQuery/#jQuery-elementArray这意味着采取一组元素,而不是一个选择器数组。你可以在这里看到这个炸弹:http://jsfiddle.net/dE9Yb/

你可以做的,而不是这样的:

alert($(Thesaurus.options.containers.join(",")).text()); 

因此,通过在一个字符串,它是用逗号加入了一个选择。

参见: http://jsfiddle.net/dE9Yb/1/