Сохранение и вызов селекторов jQuery

#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 (коллекция в вашем случае).