JQuery中append和JS中appendChild添加重复元素问题

文章目录

现象

在我们想要使用append在元素中追加子元素时,我们会创建一个dom元素,然后去循环append插入到父元素中,可是我们发现我们最终的效果只有一个元素

HTML:

<body>
	<div class="content"></div>
</body>

JS:

var span = document.createElement('span');
span.innerText = "你好";
for(var i = 0; i < 10; i++){
	document.getElementsByClassName('content')[0].appendChild(span);
}

或者我们使用JQuery的方法:

var span = $('<span>你好</span>');
for(var i = 0; i < 10; i++){
	$('.content').append(span);
}

此时我们的预期效果是:
在这里插入图片描述
在这里插入图片描述
可现实是:
在这里插入图片描述
在这里插入图片描述
那这到底是为什么呢?我们不就是重复添加一个元素到一个父元素内吗?逻辑和代码都没有问题啊。的确逻辑和代码都没有问题,问题出现在不了解浏览器dom元素是什么

解决问题

浏览器中每一个dom元素都是一个对象
在这里插入图片描述
console.dir可以将元素以对象的形式打印

所有的追加元素方法都会去判断这个父元素里面是否拥有这个元素对象,如果拥有则以为已经添加完成,如果没有则添加进去,这也就是为什么我们只添加了一个元素的原因

那么我们应该怎么做才可以达到我们的预期效果呢?

我们都知道每一个新的对象他们的地址都是不一样的,对象是引用类的值每次比较比的就是地址,地址不一样不就说明我这个元素没有添加到父元素内吗?

于是我们应该这么写:

JS:

for (var i = 0; i < 10; i++) {
            var span = document.createElement('span');
            span.innerHTML = "你好"
            document.getElementsByClassName('content')[0].appendChild(span);
        }

通过代码我们可以看到每次循环都新创建了一个span元素,然后添加进了父元素内
JQuery形式:

for (var i = 0; i < 10; i++) {
            $('.content').append($('<span>你好</span>'));
        }

此时JQuery也是一样每次循环都$('<span>你好</span>')新建一个span元素

此时的效果就是我们的预期效果了

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在JavaScriptappend方法用于将一个元素添加到另一个元素的末尾。参数可以是一个节点对象,也可以是一个字符串。如果参数是一个节点对象,可以直接传递该对象作为参数,不需要使用引号包围。例如,使用appendChild方法将一个节点对象child添加到父节点parent的末尾,可以使用以下代码:parent.appendChild(child)。\[2\] 如果参数是一个字符串,需要使用引号将其包围。在某些情况下,如果字符串包含整数和字符串的组合,需要给参数加上单引号。然而,在使用append方法时,如果参数包含单引号,可能会导致参数被错误地解析为分隔符,从而导致无法正常输出参数。为了解决这个问题,可以使用转义字符\来转义单引号,或者使用双引号将整个参数包围起来。例如,如果要将一个带有单引号的字符串作为参数添加元素,可以使用以下代码:parent.appendChild('\'child\'')。\[1\] #### 引用[.reference_title] - *1* [jsappend字符串包含onclick无效传递参数失败问题解决方案](https://blog.csdn.net/qq_26684469/article/details/53874132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [js原生方式实现jqueryappend()方法](https://blog.csdn.net/weixin_39527292/article/details/118205371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫的CG世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值