问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jquery each 循环换成原生js问题,求解答

发布网友 发布时间:2022-04-23 19:23

我来回答

2个回答

懂视网 时间:2022-04-23 23:45

jQuery.makeArray(obj)这个函数从名字上来看很容易猜出它的用途:应该是用来将传入的对象转换成一个原生array

再看看官网上对它的解释:Convert an array-like object into a true JavaScript array.(将一个类似数组对象转换为JS原生的数组)

那么怎么样的object才可以称为"array-like object"呢?这个问题不急着回答,相信看完文章你会明白的,先看看下面的实验

将HTMLCollection转换成原生Array

<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>jQuery.makeArray demo</title>
		<style>
			p {
				color: red;
			}
		</style>
		<script src="//code.jquery.com/jquery-1.10.2.js"></script>
	</head>
	<body>
		<p> First </p> <p> Second </p> <p> Third </p> <p> Fourth </p>
		<script>
			// Returns a NodeList
			var elems = document.getElementsByTagName("p");
			// Convert the NodeList to an Array
			var arr = jQuery.makeArray(elems);
			// Use an Array method on list of dom elements
			arr.reverse();
			$(arr).appendTo(document.body);
		</script>
	</body>
</html>

这里可以看到在chrome中通过document.getElementsByTagName("p")返回的是一个HTMLCollection

而非官网上所说的NodeList,特意去找了NodeList和HTMLCollection的区别:HTMLCollection 对象和 NodeList 对象很相似,但前者可能既能用名称索引也能用数字索引,而后者只能用数字索引来访问(当然NodeList也是“array-like object”)

经过实验发现elems可以通过名称和数组来索引,结论:在chrome中通过document.getElementsByTagName("p")返回的是一个HTMLCollection

HTMLCollection可以通过elems.length获取它的长度,并且可以通过elems[0]这样的方式来访问其中的元素

像不像数组的访问方式?其实它就是就一个“Array-like object”,但是它并不是js的原生数组,所以无法访问array的native方法,比如(.pop() and .reverse())

而后面通过jQuery.makeArray(elems)转换就得到了原生的JS数组arr,接下来就可以使用array的native方法了!

将jQuery包裹的数组转换成原生Array

除了HTMLCollection,还可以转换什么呢?听说过jQuery包裹的数组这么一个玩意儿吗?

不过肯定接触过,比如通过$('p')得到一组p,这一组p就是一个jQuery包裹的数组

又比如,通过.map()函数得到的也是一个jQuery包裹的数组,也可以length来得到长度,并通过下标索引来访问,并且jQuery包裹的数组还可以使用jQuery提供的方法。

可以通过$.makeArray(obj)来转换成原生Array,比如最常见的在.map()函数中得到jQuery数组之后转换成原生array再通过join()得到结果

当然,将jQuery包裹的数组转换成原生数组的方法不止这一种,常见的还有.get()和.toArray()

将json对象转换成原生Array

这一种情况稍微复杂一点,因为json对象本不是“array-like object”,所以我们需要一种转换

还记得之前我们说的几种“array-like object”吗?它们都可以通过.length来得到长度,并且可以通过下标索引来访问,比如:fakeArr.length、fakeArr[0]

那么我们是否可以通过让json支持这样的方式来将它变成“array-like object”呢?

先设计一下:

要让json支持fakeArr.length,简单,只需要定义一个key为length的 键值对就OK了

而支持下标访问似乎也可以迎刃而解,另外键值对都使用数字来作为key就好了~

那么试试吧:

var fakeArray = {0: "张三", 1: "李四", 2:"朱六", length:3};
var realArray = $.makeArray(fakeArray);
console.log(fakeArray)
console.log(realArray)
realArray.reverse();
console.log(realArray);

看到了吗?成功了!这里的realArray已经是js的原生array了,所以可以使用reverse()等native方法

需要注意的是,转换过程中length很重要,这个length也就是决定了转换后array的length

若将上述例子中的length指定为2,那么转换后的数组只有前2个元素,也就是["张三", "李四"]

若将上述例子中的length指定为4,那么转换后的数组并不会是我们希望的数组,而是类似于 new Array().push(fakeArray) 这样一个数组

热心网友 时间:2022-04-23 20:53

选取 class 比较麻烦,而且 ie 和 firefox ,都不同。

大致原理是:获取 属性 class ,然后循环 class 的值,搜索是否存在 你要找的 class。。。

具体实现是用 原生态的 js 写的。。。追问能帮下写成js不

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
时光公主高性价比氪金项目一览介绍_时光公主高性价比氪金项目一览是什么... 时光公主氪金买什么好介绍_时光公主氪金买什么好是什么 时光公主氪金买什么好 氪金钻石消费攻略 ch61u可以用gtx960显卡吗? 为什么路由器和机顶盒变成黄色网络连接不上 索尼WH-1000XM3耳机怎么通过蓝牙连接 索尼WH-1000XM3蓝牙连接手机教程... 葫芦岛市行政执法投诉办法第一章 总则 葫芦岛市价格调节基金管理办法第一章 总则 葫芦岛市政府信息公开暂行规定第一章 总则 葫芦岛市人民政府制发规范性文件规定第一章总则 中秋节的词语和句子 我女朋友微信名人间十三月我用什么? 2012深圳注安何时报名? 省内的其他市都开始开放报名窗口了,难道特区就是特别一些。 深圳 在什么地方 报名 助理工程师 深圳质量工程师考试在哪里报名确认,有谁知道一些关于在深圳考质量工程师的信息呢? 中保人寿武汉分公司 武汉人寿保险车险电话号码 中国人寿武汉市分公司洪山支公司的地址是哪? 武汉人寿保险公司在硚口区的营业网点? 请问武汉有哪些人寿保险公司 2020年江苏省安全事故中,事故起数排在第一位的是二级企业正确吗_百度问一问 动态IP用花生壳+顶级域名+邮箱服务器 六书字体,&quot;自&quot;属于什么字体? 象形、指事、会意、形声 还有,遇到类似的题目怎么区分是什么字体? 电脑运行速度变慢是什么原因造成的?该怎么办? 电脑运行速度很慢??怎么办? 电脑运行速度变得很慢 怎么处理 电脑运行速度变慢,怎么办? 电脑运行速度变慢,怎么办啊? 26版进口仿真充气娃娃 杭州性保健品的店里有没有仿真的*娃卖,最好是进口的 。有的话给个地址啊 关于中秋节的句子和词语 jquery转换成JS 移动硬盘有几千张照片,隐藏了几张,怎么找出这几张照片,忘了隐藏哪个文件夹里了? 电熔焊圈是什么样的 头水紫菜炸丸子怎么做如何做好吃 紫菜肉丸汤的做法步骤图,紫菜肉丸汤怎么做 中国的紫菜之乡是哪里?这里的紫菜有多鲜? 如何从电脑上下载歌曲 TF卡 手机下载歌曲视频怎么由内存卡转入TF卡? “牙疼不是病,疼起来真要命”,有哪些可以短暂缓解牙痛的妙招? 牙疼有什么妙方吗? 控制面板里的游戏卸载程序删不掉 为什么我装的游戏在控制面板上删除不了呢? 装了一个游戏,但开始和控制面板里都没有删除图标,应该怎么删除 想删游戏,但是控制面板里没有,该怎么删? 直接删除安装文件好么?回答好的给分! 我下载的游戏从控制面板中删除了,为什么在磁盘中打开还能玩.是不是还没彻底删除 啊? 游戏在控制面板里没有 如何删除 怎么删除在控制面板里看不到的游戏 我妈老是在控制面板里删除我下载的游戏,怎么办? 机电工程施工总承包贰级与机电设备安装工程专业承包*的区别