#jquery #jquery-selectors
#jquery #jquery-селекторы
Вопрос:
У меня есть приложение, которое сохраняет выбранный селектор jQuery для последующего использования, и я сталкиваюсь с забавной проблемой, когда пытаюсь вызвать селектор. Ниже приведен мой код для справки. Это функция обратного вызова для вызова AJAX, которая возвращает объект JSON, сохраненный в data
. Я проверил, что данные передаются правильно, но, похоже, попытка снова использовать строку в качестве селектора в jQuery не работает. String()
Материал предназначен только для теста, и я не уверен, что это необходимо.
Если у кого-нибудь есть какие-либо указания о том, почему это может не работать, я хотел бы знать. Любой код с jQuery(selector)
just не работает.
jQuery.each(data.dot_collection, function() {
x_coord = this.x_coord;
y_coord = this.y_coord;
selector = new String(this.selector);
//Works
alert( selector ); // = html > body.home.blog.logged-in.single-author.two-column.right-sidebar > div.hfeed > header#branding > hgroup > h1#site-title
//Works
alert(jQuery("html > body.home.blog.logged-in.single-author.two-column.right-sidebar > div.hfeed > header#branding > hgroup > h1#site-title").offset().left);
// Not Working amp; jQuery(selector).offset() = 'undefined'
alert( jQuery(selector).offset().left );
Комментарии:
1. Кстати,
selector = this.selector
тоже не работает.2. Работает? jsfiddle.net/EVyR2 Возможно, что-то не так за пределами кода, который вы нам показали?
3. Я согласен с этим. Я просто не уверен, что происходит, поскольку я могу предупредить селектор, и он выглядит просто отлично. Я могу предупредить JSON, и это тоже выглядит нормально.
4. Это JSON, который я получаю обратно за одну точку…
{ "dot_collection":[ { "x_coord":"402", "y_coord":"68", "created_date":"2011-10-19 12:33:57", "number_of_neighbors":0, "selector":"html > body.home.blog.logged-in.single-author.two-column.right-sidebar > div.hfeed > header#branding > hgroup > h1#site-title","dot_color":"#7cf27e" } ] }
Ответ №1:
Я предполагаю, что проблема в том, что вы передаете String
объект вместо примитивной строки, и jQuery не может это обнаружить.
Попробуйте:
var selector = this.selector;
Комментарии:
1. Сначала я попробовал это, но безуспешно.
String()
Часть была там только в качестве теста, поэтому в моем кодеselector = this.selector
тоже не работает.2. @Ryan: Что вам
jQuery(selector).length
дает?3. Это дает мне ноль (0). Это просто пустой объект.
4. @Ryan: Я думаю, вам нужно создать jsfiddle. чистая демонстрация … очевидно, что-то не так, но я могу вам сказать, что передача переменной, содержащей селектор, работает в целом.
5. Нет,
alert( selector )
работает,alert(jQuery("html > ... h1#site-title").offset().left)
не работает,alert( jQuery(selector).offset().left )
работает.
Ответ №2:
jQuery('p').each(function() {
console.log(this.offsetLeft);
});
Используя это, я могу получить смещение влево для каждого p (коллекция в вашем случае).