Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 移动关闭</a>;标记到包含元素的末尾_Javascript_Jquery - Fatal编程技术网

Javascript 移动关闭</a>;标记到包含元素的末尾

Javascript 移动关闭</a>;标记到包含元素的末尾,javascript,jquery,Javascript,Jquery,我正试图获得一个链接来包装一个div中的所有文本。我只能找到将某些DOM元素完全移动或将其他元素移动到一个元素中的解决方案 当前情况: <div class="text"> <a href="link">text</a> and more text </div> <div class="text"> <a href="link">text and more text</a> </div&g

我正试图获得一个链接来包装一个div中的所有文本。我只能找到将某些DOM元素完全移动或将其他元素移动到一个元素中的解决方案

当前情况:

<div class="text">
    <a href="link">text</a> and more text
</div>
<div class="text">
    <a href="link">text and more text</a>
</div>

还有更多的文字
理想情况:

<div class="text">
    <a href="link">text</a> and more text
</div>
<div class="text">
    <a href="link">text and more text</a>
</div>


不幸的是,我无法更改标记,因此,我必须对jQuery做一些事情。

您可以首先用class
text
获取
div
中的HTML,然后用
'
替换结束标记
,最后在替换的字符串中附加一个结束标记
以便得到您想要的结果:

var aHTML=$('.text').html();
aHTML=aHTML.trim()。替换(/,“”)+;
$('.text').html(aHTML)

还有更多的文字
您需要使用将锚点插入其中

$(".text a").append(function(){
  return this.nextSibling
});
$(“.text a”).append(函数(){
返回此.nextSibling
});

还有更多的文字

避免直接使用html,最好不要更改或覆盖它。您所需要做的就是获取下一个文本同级节点并附加到上一个
a

$('.text a')。每个(函数(){
$(this.append)(this.nextSibling)
})

还有更多的文字

HTML/JavaScript不能像那样“移动”结束标记,但可以做的是移动文本。而且,您不需要jQuery来完成这项工作;使用香草JavaScript非常容易:

let link=document.querySelector('.text a')
让text afterlink=link.nextSibling
link.appendChild(textAfterLink)

还有更多的文字

这里有一种方法,可以在类为
的元素中查找所有未压缩的文本。text
并将所有这些文本附加到第一个
方法中,该方法使用addequated条件链接a以删除子文本,同时将它们附加到
和更多文本中

迎着朝阳微笑
三只小鸟
在我的门阶旁
别碰这个

唱着甜美的歌
纯真的旋律
这是我给你的信息
说,什么都不用担心
因为每件小事
会没事的
关闭,但最好不要覆盖
innerHTML
。当赋值语句与
返回无关时,为什么要将它放在
返回
行中,后跟逗号和实际返回值?如果你问我的话,这是一种糟糕且令人困惑的风格。@PeterB由于逗号运算符,他正在返回
h+text
。但您是对的,使用逗号将两行代码拆分为一行不是一种好的样式。因为您直接修改
innerHTML
/
.html()
,这将断开现有内容上的任何事件侦听器,并使对现有内容的任何引用无效。这样做可能会破坏页面中的功能和/或导致其他JavaScript失败和/或产生异常。除非您知道修改
innerHTML
/
.html()
是可以接受的,否则应该尽可能/合理地避免这种情况。您关心
之间的空格吗?一个div中有两个
吗?在这种情况下会发生什么?我注意到没有一个答案考虑多个兄弟姐妹,并且唯一建议的修复(<代码>(这个Next SsibIn)< /代码>)将结束嵌套兄弟<代码> <代码>。您是否只希望遵循<代码> <代码>的文本节点被添加到<代码> <代码>?如果还有其他因素,会发生什么?这种情况是否会根据什么类型的元素发生变化(例如,您是否希望对
执行不同的操作)?如果其他元素具有默认的单击操作(例如,另一个
),该怎么办?是否要保留移动节点上的任何现有事件侦听器和/或对节点的引用?是否保证
a
标记是
div
firstElementChild
?您的目标是修改DOM还是仅仅使整个
div
可点击?最重要的是,到目前为止您实际尝试了什么?为了完整性,您需要一个
while(node.nextSibling)…
循环。