我的函数返回空。为什么?
我知道这是一个基本问题,但我坚持在我的代码中的某处。我从某处获得了该代码,但现在我正根据自己的需要对其进行修改。我的函数返回空。为什么?
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)
后,它返回空,因此整个函数返回空。
我可以使用不同的东西吗?
jquery('#selector')
相当于document.getElementById('selector')
。如果没有id为selector
的DOM节点,则会得到一个空的结果。
例如
<div id="selector">...</div>
将返回对应于该div的dom节点。你有jquery加载?
我有ID选择器的div标签。但它仍然不起作用 – 2619 2012-08-13 12:46:48
jQuery(selector)
正在寻找符合选择器标准的DOM元素。
$('#example') == jQuery('#example')
双方将寻找一些ID为“榜样”
阅读你的代码我有一个问题后:你把#在变量selector
? 一个解决方案,通过更换坏线来解决这个问题jqEls = jQuery("#" + selector);
如果问题不是由于那你能说selector
的类型吗?字符串?对象? jQueryObject?
$(selector).get()
将返回undefined
如果找不到元素。这就是为什么你的函数返回undefined
。为了解决这个问题,你可以,如果没有找到的元素使用默认值:
ret = jqEls.length ? jqEls.get() : {};
这样你的函数总是返回具有您length
和query
属性的对象,但它不会有,如果一个元素的jQuery没有找到一个。
正如我在文章中提到的,问题出现在这行'jqEls = jQuery(selector);'。在这行之后,jqEls为空,所以默认这行'ret = jqEls.get();'将返回undefined。 – 2619 2012-08-13 13:52:57
@ al0neevenings'jQuery(selector)'将总是返回一个jQuery对象。如果没有元素匹配,'length'将会是0,'.get()'会给你未定义的。我发布的代码通过使用一个空对象'{}'来处理这个问题,而不是未定义的,如果没有找到元素的话。 – jbabey 2012-08-13 13:55:22
但我传递的选择符是有效的,并且在我的带有ID的html代码中有HTML元素。那为什么它不匹配? – 2619 2012-08-13 13:59:34
你能给个演示吗? – xdazz 2012-08-13 12:43:46
它在很多文件中都有很多代码。那么我怎样才能给它演示一个代码呢?任何建议? jsfiddle不适合这个。 – 2619 2012-08-13 12:44:55
似乎很适合我:http://jsfiddle.net/stZzR/。 – 2012-08-13 12:47:25