我使用以下代码遇到了jquery和selectors问题:
<div id="test"></div>
console.log($('#test'));
这总是返回类似[<div id="test"></div>]
的列表,而不是单个元素。
这导致总是必须为每个操作而不是$('#test')[0]
编写$('#test')
。有什么想法吗?
此致
答案 0 :(得分:8)
Jquery不会返回HtmlElement,它会返回一个jQuery对象。
jQuery对象包含一个集合 文档对象模型(DOM) 已创建的元素 HTML字符串或从中选择 文献。因为jQuery方法经常出现 使用CSS选择器来匹配元素 从文档,元素集 在jQuery对象中通常称为a 一组“匹配元素”或“已选中” 元素“
jQuery对象本身表现很多 像一个数组;它有一个长度 财产和财产中的要素 对象可以通过他们的访问 数字索引[0]到[length-1]。 请注意,jQuery对象不是 实际上是一个Javascript Array对象,所以 它没有a的所有方法 true数组对象,例如join()。 http://api.jquery.com/Types/#jQuery
这是复合设计模式
的示例复合模式描述了一组对象,可以像对象的单个实例一样对待它们。实现此模式允许您以统一的方式处理单个对象和组合。在jQuery中,当我们在单个DOM元素或一组DOM元素上访问或执行操作时,我们可以以统一的方式处理它们。 http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjquery
答案 1 :(得分:0)
jQuery封装了由于多种原因找到的任何对象。首先,它确保无论如何,例如,永远不会返回null。相反,找到的元素被插入到列表中。事实上,即使您正在搜索单个元素,机制也始终保持不变,因此结果将被放置在一个元素的数组中,而不是元素本身。
答案 2 :(得分:0)
在jQuery中,最好将选择器视为匹配多个项目,如果您使用每种语法迭代匹配项目,那么您的解决方案将是最佳的...
$('#test').each(function() {
console.log($(this));
});
答案 3 :(得分:-3)
由于ID不是唯一的,jQuery会查找具有此ID的每个元素。所以它总是返回一个列表,因为它不能保证元素只是一个