Javascript 如何用另一个元素包装html中的所有文本?

Javascript 如何用另一个元素包装html中的所有文本?,javascript,jquery,html,Javascript,Jquery,Html,例如: 从 怎么了 出什么事了! 谢谢你的帮助 到 怎么了 出什么事了! 谢谢你的帮助 我如何在jQuery或纯JavaScript中创建类似的内容?使用以下HTML: <div id="container" > whats up! <div> whats up2! </div> thank you for your help </div>​​​ 怎么了 出什么事了! 谢谢你的帮助 ​​​ 你可以这样做: var n

例如:


怎么了
出什么事了!
谢谢你的帮助


怎么了
出什么事了!
谢谢你的帮助
我如何在jQuery或纯JavaScript中创建类似的内容?

使用以下HTML:

<div id="container" >
   whats up!
   <div> whats up2! </div>
   thank you for your help
</div>​​​

怎么了
出什么事了!
谢谢你的帮助
​​​
你可以这样做:

var nodes = document.getElementById('container').childNodes;

$(nodes).each(function(ind, el){
    if(el.nodeType == 3)
        $(el).wrap('<span>');
    else
        $(el).wrapInner('<span>');
});
var nodes=document.getElementById('container').childNodes;
$(节点)。每个(函数(ind,el){
if(el.nodeType==3)
$(el).包裹('');
其他的
$(el.wrapInner('');
});
​ 据我所知,jQuery无法获取文本节点(如果我错了,请纠正我),因此可以使用纯JavaScript并使用jQuery的方法获取它们

具有此HTML:

<div id="container" >
   whats up!
   <div> whats up2! </div>
   thank you for your help
</div>​​​

怎么了
出什么事了!
谢谢你的帮助
​​​
你可以这样做:

var nodes = document.getElementById('container').childNodes;

$(nodes).each(function(ind, el){
    if(el.nodeType == 3)
        $(el).wrap('<span>');
    else
        $(el).wrapInner('<span>');
});
var nodes=document.getElementById('container').childNodes;
$(节点)。每个(函数(ind,el){
if(el.nodeType==3)
$(el).包裹('');
其他的
$(el.wrapInner('');
});
​ 据我所知,jQuery无法获取文本节点(如果我错了,请纠正我),因此可以使用纯JavaScript并使用jQuery的方法获取它们


为了完整起见,@davids提供的解决方案扩展到更深层的层次结构,可以在“纯”jquery中编写如下内容

$(“#容器”)
.find(“*”)
.andSelf()
.contents()
.filter(函数(){
返回this.nodeType==3;
})
.wrap(“”)
内容如下:获取#container及其所有正确的DOM子级的完整内容,只保留文本节点(
nodeType==3
),并将它们包装在


注意,如果应用于大型DOM树,这将变得非常缓慢。

为了完整起见,@davids提供的解决方案扩展到更深层的层次结构,可以在“纯”jquery中编写如下内容

$(“#容器”)
.find(“*”)
.andSelf()
.contents()
.filter(函数(){
返回this.nodeType==3;
})
.wrap(“”)
内容如下:获取#container及其所有正确的DOM子级的完整内容,只保留文本节点(
nodeType==3
),并将它们包装在


注意,如果应用于大型DOM树,这将变得非常缓慢。

我唯一能想到的方法是先添加另一个元素,例如在所有文本周围,然后再从那里开始。老实说,我不知道从哪里开始使用此方法。如果我访问所有文本,只添加一组标识符,那么我试图实现的目标是可以实现的,但我试图避免这种情况,并在html呈现的开始感觉到它。我唯一能想到的方法是添加另一个元素,例如首先在所有文本周围添加一个元素,然后从那里开始。老实说,我不知道从哪里开始方法如果我访问所有文本并只添加一组标识符,那么我试图实现的目标是可以实现的,但我试图避免这种情况,并在html呈现的开始处感觉到它。如果要将其应用于主体中的每个元素,该怎么办?我在获取body的childNodes时遇到了挑战:它是
document.getElementsByTagName('body').childNodes?编辑:事实上,我会算出一个:D,但是谢谢你,这样你就可以得到第一级的所有孩子。您应该使用一些递归函数,这是一个很好的开始,如果您想将其应用于主体中的每个元素,该怎么办?我在获取body的childNodes时遇到了挑战:它是
document.getElementsByTagName('body').childNodes?编辑:事实上,我会算出一个:D,但是谢谢你,这样你就可以得到第一级的所有孩子。你应该使用一些递归函数,这是一个很好的开始
$('#container')
.find('*')
.andSelf()
.contents()
.filter(function() {
    return this.nodeType == 3;
})
.wrap('<span>')