2014-02-05 3 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, имеет менее 500 слов в нескольких div.entry элементов.

В 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/

Смежные вопросы