2012-08-13 5 views
0

Я знаю, что это основной вопрос, но я застрял с ним где-то в моем коде. Я получил этот код откуда-то, но теперь я его изменяю в соответствии с моей потребностью.Моя функция возвращает пустую. Зачем?

Что делает jQuery ('# selector')? В моем коде он всегда возвращается пустым.

Вот мой код

query: function (selector, context) { 
      var ret = {}, that = this, jqEls = "", i = 0; 
      if(context && context.find) { 
       jqEls = context.find(selector); 
      } else { 
       jqEls = jQuery(selector); 
      } 
      ret = jqEls.get(); 
      ret.length = jqEls.length; 
      ret.query = function (sel) { 
       return that.query(sel, jqEls); 
      } 

      return ret; 
     } 

, когда я называю эту функцию запроса, то я прохожу селектор в качестве параметра. Когда я делаю console.log(selector), у него есть все селекторы, которые мне нужны в этой функции. Но проблема в этой строке jqEls = jQuery(selector);. когда я делаю console.log(jqEls) после этого, он возвращается пустым, поэтому вся функция возвращает пустую.

Могу ли я использовать что-то другое, чем это, чтобы заставить его работать?

+0

Не могли бы вы дать демо? – xdazz

+0

Его много кода в нескольких файлах. Итак, как я могу дать ему демо с такой большой частью кода? любое предложение? jsfiddle не подходит для этого. – 2619

+0

Кажется, все отлично работает: http://jsfiddle.net/stZzR/. –

ответ

1

jquery('#selector') является эквивалентом document.getElementById('selector'). Если нет узла DOM с идентификатором selector, вы получите пустой результат.

например.

<div id="selector">...</div> 

вернет узел dom, соответствующий этому div. У вас загружен jquery?

+0

У меня есть тег div с селектором id. Но все равно он не работает – 2619

1

jQuery(selector) ищет элемент DOM, который соответствует критериям выбора.

$('#example') == jQuery('#example') 

Оба будут искать что-то с идентификатором «например»

0

После прочтения кода у меня вопрос: вы поместите # в вашей переменной selector? Решение решить эту проблему, заменив плохую линию jqEls = jQuery("#" + selector);

Если проблема не из-за этого вы можете сказать тип selector? строка? объект? jQueryObject?

+0

Да, идентификатор селектора с префиксом '#'. И вы можете уточнить свой второй вопрос? Я действительно не получаю ваш последний комментарий. – 2619

+0

Это строка. – 2619

+0

Я имею в виду возврат 'typeof selector'. Какую версию jQuery вы используете? Вы используете несколько версий jQuery? –

0

$(selector).get() вернет undefined, если элемент не найден. Вот почему ваша функция возвращает undefined. Чтобы исправить это, вы можете использовать значение по умолчанию, если нет элемента найдено:

ret = jqEls.length ? jqEls.get() : {}; 

Таким образом, ваша функция всегда будет возвращать объект, который имеет свои length и query свойства, но это не будет иметь элемент, если JQuery не нашел.

+0

Как упоминается в моем сообщении, проблема заключается в этой строке 'jqEls = jQuery (selector);'. После этой строки jqEls пуст, поэтому по умолчанию эта строка 'ret = jqEls.get();' будет возвращать undefined. – 2619

+0

@ al0neevenings 'jQuery (selector)' ВСЕГДА возвратит объект jQuery. если никакие элементы не были сопоставлены, 'length' будет 0 и' .get() 'даст вам неопределенный. Код, который я написал, касается этого, используя пустой объект '{}' вместо undefined, если элемент не найден. – jbabey

+0

Но селектор, который я передаю, действителен и есть HTML-элементы в моем html-коде с идентификаторами. Тогда почему это не соответствует? – 2619

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