Javascript 关于JQuery设计的困惑
我刚开始使用Jquery,我有以下理解:Javascript 关于JQuery设计的困惑,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我刚开始使用Jquery,我有以下理解: Jquery的每个选择器都会返回一个包装好的项目列表,这些项目可以是 空名单 单元素列表 包含许多元素的列表 链式函数作用于整个列表,而不仅仅是一个列表 我的困惑是: A.有些函数如何返回正确的值,即使它们在包含许多元素的列表上操作,例如数据(“某物”) B.如果我们特别想对单个项目进行操作,我们应该怎么做 像正则数组一样迭代整个列表 javascript的过滤功能 还有别的事(想不出来) Jquery的每个选择器总是返回一个项目的包装列表 不仅
- 空名单
- 单元素列表
- 包含许多元素的列表
- 像正则数组一样迭代整个列表
- javascript的过滤功能
- 还有别的事(想不出来)
$()
)是一组元素,具有作用于该集合的方法
(很少情况下,jQuery对象包含非元素的内容,例如如果从回调返回非元素,或者如果使用包含元素之外的文本和注释节点的返回值。但在绝大多数情况下,您处理的是元素。)
A.即使某些函数在包含许多元素的列表(例如data('something')
)上运行,它们如何返回正确的值
很好的问题!API是不对称的。在大多数情况下,当您使用函数作为getter时,它从集合中的第一个元素获取;但当您将其用作setter时,它会设置集合中的所有元素。考虑:
var a = $("a");
console.log(a.attr("href")); // Shows the href attr of the
// **first** element
a.attr("href", "http://stackoverflow.com"); // Sets the href attr of **all**
// elements in the set
此规则的最大例外是,它返回集合中所有元素的文本,而不仅仅是第一个元素的文本。为什么?呃……问问约翰·雷西格(John Resig):-)就是这样
B.如果我们特别想对单个项目进行操作,我们应该怎么做
如果您只是从集合中获取一个值,那么如果元素是第一个,则无需执行任何特殊操作;只需使用getter(见上文)
否则,您至少有两个选项:
$(yourSet[n])
仅围绕n
th元素构建一个新集合
jQuery对象类似于数组;当您使用[]
符号对它们进行索引时,您可以访问该索引处的原始元素。因此,$(yourSet[n])
获取原始元素(yourSet[n]
),然后将其包装到jQuery对象中
- 像正则数组一样迭代整个列表
this
引用集合中的每个条目。(它也可以作为参数使用。)注意,它将是原始条目(例如,原始DOM元素),而不是jQuery对象
- javascript的过滤功能
Array.prototype.filter
的函数。(或者,您可以向其传递一个字符串,当用作CSS选择器时,它将根据这些字符串是否与该字符串匹配来过滤集合。)
- 还有别的事(想不出来)
$("some-selector").text(function(index) {
if (index % 2 === 1) {
return $(this).text() + " - " + index;
}
});
上述各种情况的示例:
var divs=$(“div.x”);
//getter从集合中的第一个条目获取
console.log(divs.attr(“类”);//“x a”,第一班的学生
//…除了'text',它是不同的:
console.log(divs.text());//连接在一起的所有元素的文本
//在所有元素上设置setter;这将使它们全部变为绿色:
css分类(“颜色”、“绿色”);
//让我们仅加粗第三个元素:
等分(2)css(“字体重量”、“粗体”);
//让我们使用[]符号将第四个斜体标记为:
$(divs[3]).css(“字体样式”、“斜体”);
//让我们使用'filter'只获取奇数元素
//索引,并在结果输出文本上使用'each'
筛选器(函数(索引){返回索引%2==1;})。每个(函数(){
console.log($(this.text());
});
//让我们使用'text'将索引添加到每个元素的末尾:
divs.text(函数(索引){
返回$(this).text()+“-”+索引;
});
//(注意:上面使用“css”只是为了说明访问器是如何工作的;一般来说
//更喜欢使用类而不是直接设置样式)
首先
第二
第三
第四
第五
有段时间没听过“问约翰·雷斯格(ask John Resig)”:)我一直在想你怎么能在大约10分钟内给出这么好的、广泛的答案。@Jonasw:jQuery恰好是我很熟悉的工具,我妈妈建议我在高中上一堂触摸打字课。这很可能是她在高中时给我的最好的建议,而且这个标准已经相当高了。:-)