JQuery官方学习资料(译):遍历JQuery对象和非JQuery对象

    JQuery提供了一个对象遍历的Utility方法$.each()和一个JQuery集合遍历方法.each()。

 

  • $.each()
    $.each()是一个通用的方法用来遍历对象和数组,Plain对象是通过其命名属性进行遍历的。
    $.each()可以用来替换传统的for和for-in循环。
var sum = 0;
var arr = [ 1, 2, 3, 4, 5 ];
for ( var i = 0, l = arr.length; i < l; i++ ) {
sum += arr[ i ];
}
console.log( sum ); // 15
$.each( arr, function( index, value ){
sum += value;
});
console.log( sum ); // 15
    需要注意的是我们不需要通过arr[ index ]来访问$.each()迭代的值。
var sum = 0;
var obj = {
foo: 1,
bar: 2
}
for (var item in obj) {
sum += obj[ item ];
}
console.log( sum ); // 3
$.each( obj, function( key, value ) {
sum += value;
});
console.log( sum ); // 3
    需要注意的是$.each()可以用来迭代plain对象,、数组和非JQuery集合的类数组对象,JQuery集合需要使用.each()。
// 以下代码是错误的
$.each( $( "p" ), function() {});

 

  • .each()
    .each()是直接使用在JQuery集合上的,它遍历集合中匹配的元素并执行回调函数,当前元素的序号作为回调函数的第一个参数,如果是DOM元素的话也将被传递作为第二个参数。在回调函数中也可以使用this关键字指向当前元素。
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
</ul>
$( "li" ).each( function( index, element ){
console.log( $( this ).text() );
});
// Link 1
// Link 2
// Link 3
    • 第二参数
    无论是故意的还是不经意的,执行上下文有可能会发生改变。当经常使用this关键字时,很容易混淆自己或别人编写的代码。即使执行上下文保持不变,它也更具有可读性。
$( "li" ).each( function( index, listItem ) {
this === listItem; // true
$.ajax({
success: function( data ) {
// 上下文发生改变了
this !== listItem; // true
}
});
});
    • 有时候.each()不是必要的
    许多JQuery方法都隐含遍历,他们将应用在每个匹配的元素上。例如:
$( "li" ).each( function( index, el ) {
$( el ).addClass( "newClass" );
});
$( "li" ).addClass( "newClass" );
    也有一些方法是不能进行遍历的,这时就需要 .each()的帮助了。例如:
// 无法运行的
$( "input" ).val( $( this ).val() + "%" );
// .val() 不能改变执行上下文,所以这里this === window
$( "input" ).each( function( i, el ) {
var elem = $( el );
elem.val( elem.val() + "%" );
});
    以下的方法是需要 .each()进行迭代的:
  • .attr() (getter)
  • .css() (getter)
  • .data() (getter)
  • .height() (getter)
  • .html() (getter)
  • .innerHeight()
  • .innerWidth()
  • .offset() (getter)
  • .outerHeight()
  • .outerWidth()
  • .position()
  • .prop() (getter)
  • .scrollLeft() (getter)
  • .scrollTop() (getter)
  • .val() (getter)
  • .width() (getter)
    需要注意的是大部分情况下,getter返回的结果是JQuery集合中的第一个元素,而setter的行为影响集合中所有匹配的元素。
    此外,一个setter的值、特性、属性、CSS的setter和一个接受匿名回调函数的DOM插入方法(.text() and .html())是被应用到每一个匹配的元素,传递给回调函数的参数是当前匹配元素的序号。
$( "input" ).each( function( i, el ) {
var elem = $( el );
elem.val( elem.val() + "%" );
});
$( "input" ).val(function( index, value ) {
return value + "%";
});

 

  • .map()
    无论什么时候,当我们想创建一个数组或基于所匹配的元素串联字符串,我们可以使用.map()更好的进行遍历。
var newArr = [];
$( "li" ).each( function() {
newArr.push( this.id );
});
$( "li" ).map( function(index, element) {
return this.id;
}).get();
    需要注意的是,.get()连接在最后面,.map()返回的是一个JQuery包裹集合,即使回调函数返回的是字符串。.get()返回的是一个基本的JavaScript数组。如果想要拼接字符串,可以在数组方法.get()之后连接原生JavaScript方法 .join()。

 

  • $.map()
    $.map()运行在原生JavaScript数组上,而.map()运行在JQuery元素集合上。$.map()返回的是一个原生JavaScript数组并且不需要使用.get()方法。
<li id="a"></li>
<li id="b"></li>
<li id="c"></li>
<script>
var arr = [{
id: "a",
tagName: "li"
}, {
id: "b",
tagName: "li"
}, {
id: "c",
tagName: "li"
}];
// 返回 [ "a", "b", "c" ]
$( "li" ).map( function( index, element ) {
return element.id;
}).get();
// 返回 ["a", "b", "c"]
$.map( arr, function( value, index ) {
return value.id;
});
</script>

转载于:https://www.cnblogs.com/liusuqi/p/3311500.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STC15库函数上手笔记】8、比较器

目录库函数compare.ccompare.hSTC15Fxxxx.H测试程序main.cSTC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 库函数 比较器的库函数仅在官方例程中发现&#xff0c;未与其他库函数放在一起&#xff0c;笔者也未对其进行测试&…

WIN10 下 PHP7 中文乱码的解决办法

在数据提交前&#xff0c;插入语句 mysqli_set_charset($conn,utf8);

不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门

Vue.js——60分钟快速入门 Vue.js是当下很火的一个JavaScript MVVM库&#xff0c;它是以数据驱动和组件化的思想构建的。相比于Angular.js&#xff0c;Vue.js提供了更加简洁、更易于理解的API&#xff0c;使得我们能够快速地上手并使用Vue.js。 本文摘自&#xff1a;http://www…

指针以及内存分配

原文&#xff1a;http://blog.csdn.net/bizhu12/article/details/6532235 1. 指针很灵活,这使得指针很难管理,在定义指针时,将在栈中开辟一块内存存放指针的地址(栈内的内存由系统分配和释放),指针的地址内存只是存放指针的地址,不存放指针指向的数据,值得注意的是,定义指针时指…

建议11: 区别对待==和Equals

建议11&#xff1a; 区别对待和Equals在开始本建议之前&#xff0c;首先要明确概念“相等性”。CLR中将“相等性”分为两类&#xff1a;“值相等性”和“引用相等性”。如果用来比较的两个变量所包含的数值相等&#xff0c;那么将其定义为“值相等性”&#xff1b;如果比较的两…

mysql如何修改开启允许远程连接

关于mysql远程连接的问题&#xff0c;大家在公司工作中&#xff0c;经常会遇到mysql数据库存储于某个人的电脑上&#xff0c;大家要想连接mysql服务&#xff0c;装有mysql服务的电脑就必须开启远程连接 第一步&#xff0c;用dos连接上你的数据库&#xff0c;&#xff08;我这里…

Objective-C马路成魔【14-关键C语言功能】

郝萌主倾心贡献&#xff0c;尊重作者的劳动成果&#xff0c;请勿转载。 假设文章对您有所帮助&#xff0c;欢迎给作者捐赠&#xff0c;支持郝萌主。捐赠数额任意&#xff0c;重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载&#xff1a;点我传送 这里介绍一些特性&#x…

Solidworks如何自动打开和关闭特征识别FeatureWorks

如果直接对已有的零件识别特征&#xff0c;可能会报错 删除多余的特征&#xff0c;先只保留一个输入&#xff08;注意没有必要连草图也删掉&#xff0c;草图不会影响识别特征&#xff0c;你识别完了之后草图再接着该拉伸拉伸&#xff0c;该切除切除&#xff09;&#xff0c;然后…

SPI驱动0.96/1.3寸 OLED屏幕,易修改为DMA控制

目录OLED SPI 端口定义七针OLED引脚定义六针OLED引脚定义驱动程序oled.coled.holedfont.h使用main.c实验现象STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 DMA控制见【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、…

分享网页到微信朋友圈的官方接口

看到 JiaThis 增加了微信分享的按钮&#xff0c;查看了下网络请求&#xff0c;是官方提供的接口&#xff0c;不过官方文档还没有这方面的信息。这个接口应该是合作测试中的&#xff0c;不排除以后会更改或者停用。 目前分享到微信朋友圈不同于通常的分享&#xff0c;需要先向微…

WordPress PHP Fatal Error “Maximum execution time of 30 seconds exceeded” 的解决办法

修改Wp-config.php 在wp-config.php中增加一行&#xff0c;注意在/* That’s all, stop editing! Happy blogging. */”这一行之前加入&#xff1a; set_time_limit(60); https://blog.csdn.net/cnpinpai/article/details/84575015

上传图片在页面上显示

看了别人写的 自己照着写了一下 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()"…

Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题

A. GukiZ and Contest Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/problem/A Description Professor GukiZ likes programming contests. He especially likes to rate his students on the contests he prepares. Now, he has deci…

提高你的Java代码质量吧:使用valueof前必须进行校验

一、分析 每个枚举都是java.lang.Enum的子类&#xff0c;都可以访问Enum类提供的方法&#xff0c;比如hashCode、name、valueOf等&#xff0c;其中valueOf方法会把一个String类型的名称转变成枚举项&#xff0c;也就是在枚举项中查找字面值和该参数相等的枚举项。 我们来深入…

【STC15库函数上手笔记】9、硬件SPI

目录硬件知识库函数spi.cspi.h测试main.c实验现象STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬件知识 摘自《STC15系列单片机器件手册》 STC15系列单片机还提供另一种高速串行通信接口——SPI接口。SPI是一种全双工…

中介者模式分析、结构图及基本代码

&#xfeff;&#xfeff;定义&#xff1a;用一个中介对象来封装一系列的对象交互。中介者使各对象不须要显式地相互引用。从而使其耦合松散&#xff0c;并且能够独立地改变它们之间的交互。适用地方&#xff1a;中介者模式一般应用于一组对象以定义良好可是复杂的方式进行通信…

WordPress 数据库结构及表字段作用解析

对于WordPress的开发可以说子凡已经是如痴如醉了&#xff0c;通过 WordPress 本身的开放性接口可以做到很多的事情&#xff0c;但是有些时候我们可能更喜欢直接查询数据库来实现某些 WordPress 没有提供的函数来实现目的&#xff0c;所以这时候我们就需要对WordPress 数据库的结…

硬件负载均衡设备介绍

最常用是F5 与citrix netscaler 负载均衡分全局负载均衡和本地负载均衡。 地负载均衡是指对本地的服务器群做负载均衡&#xff0c;全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。 循环DNS 就是每次解析域名时指向IP loop list 里的下一个…

【STC15库函数上手笔记】10、EEPROM

目录硬件知识基本介绍软件知识EEPROM多字节读函数EEPROM多字节写函数EEPROM扇区擦除函数函数测试main.c实验现象STC实验箱4 IAP15W4K58S4 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬件知识 基本介绍 摘自《STC15系列单片机器件手册》 STC…

Android中shape中的属性大全

<shape><!-- 实心 --><solid android:color"#ff9d77"/><!-- 渐变 --><gradientandroid:startColor"#ff8c00"android:endColor"#FFFFFF"android:angle"270" /><!-- 描边 --><strokeandroid:wid…