.find和.contents不起作用。
.find和.contents不起作用。
我有一个条件,如果我的父元素div
中有class为.ads
的子元素,则应该弹出alert('true')
,否则弹出alert('false')
。但是我的函数在两种情况下都返回true
。这是jsFiddle链接:http://jsfiddle.net/F3EXf/
aaaa
嗨vega,请查看下面的屏幕截图
问题出现的原因:
在这段代码中,使用了jQuery的.find()方法来查找元素。但是在查找之后,使用了.length属性来判断是否找到了符合条件的元素。根据代码中的判断条件,如果找到了符合条件的元素,即长度大于0,就会弹出'true';否则,弹出'false'。
解决方法:
在这段代码中,不需要使用'>0'来判断长度是否大于0。因为在JavaScript中,0被视为false,而大于0的数值被视为true。所以,只需要判断长度是否为0即可。
修正后的代码如下:
$(function () { if ($('#me').find('.ads').length) { alert('true'); } else { alert('false'); } });
这样修改之后,就可以正确判断是否找到了符合条件的元素了。如果找到了,弹出'true';否则,弹出'false'。
问题:.find和.contents方法不起作用的原因和解决方法。
问题出现的原因是:使用.find()方法时,即使目标元素不存在,它也会返回一个jQuery包装的空对象,被视为一个true值。因此,使用.find('.ads')将始终返回true,无论目标元素是否存在。
解决方法是:使用.length属性来检查元素是否存在,如果长度大于0则表示元素存在。
为了检查元素是否存在,可以使用以下代码:
if ($('#me').find('.ads').length) { ... }
.find()方法允许我们在DOM树中搜索这些元素的后代,并从匹配的元素构建一个新的jQuery对象。它创建了一个jQuery包装的节点集合,在任何情况下都会被视为true。对于你的目的来说,重要的是检查这个集合是否为空。
如果想要了解更多关于jQuery包装的节点集合的信息,可以参考相关的文章或资料。
问题出现的原因是:当使用.find和.contents函数时,无法获取到预期的结果,即选择器的长度为0。解决方法是使用$(selector).length来获取选择器的长度。
在jQuery中,所有的选择器和遍历函数都返回一个jQuery对象。jQuery对象是一个类似数组的对象,具有属性和对核心函数的引用。
当调用jQuery函数$(selector)时,它会根据选择器创建一个jQuery对象,其中包含与选择器匹配的元素列表。
例如:当执行$('#test')时,它会创建一个jQuery对象,并将ID为test的DOM元素包装起来。
问题出现在jQuery的.init函数中,该函数用于处理ID选择器。在匹配到ID时,会将DOM元素包装成一个jQuery对象。
问题的关键是,无论选择器是否匹配到元素,$函数始终返回一个jQuery对象,以保护后续的链式调用不会出错。
大多数情况下,我们选择一个元素来执行一些操作,例如$('#test').addClass('example')。
具体步骤如下:
1. 使用字符串参数'#test'调用jQuery函数$('#test')。
2. jQuery调用.init函数来确定参数的类型,并根据匹配的元素(如果有的话)返回一个包含匹配元素的jQuery对象。
3. 在jQuery对象上调用.addClass函数,该函数会迭代匹配元素的列表,并将类添加到元素上。
需要注意的是:
1. $函数始终返回一个jQuery对象。
2. jQuery对象是一个JavaScript对象,具有以下内容:
a. 包装的匹配元素集合
b. 属性
c. 函数
以下是一个示例,使用.find函数获取匹配元素的包装集合:
var $lisample = $('ul').find('.red');
通过以上内容,我们了解到了.find和.contents函数无法正常工作的原因,以及如何解决这个问题。我们还了解了jQuery对象的特点和使用方法。
参考链接:
- [How do jQuery objects imitate arrays?](https://stackoverflow.com/questions/1483445)
- [jQuery object and DOM element](https://stackoverflow.com/questions/6974582)
- [Does calling the jQuery function return an object?](http://blog.buymeasoda.com/does-calling-the-jquery-function-return-an-ob)