首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分包装内部HTML

部分包装内部HTML
EN

Stack Overflow用户
提问于 2017-01-06 17:17:57
回答 3查看 223关注 0票数 2

我想知道有什么方法可以把这个转换成:

代码语言:javascript
复制
<body>
    Foo
    Bar
    <div>Abc</div>
    <div>Xyz</div>
</body>

对此:

代码语言:javascript
复制
<body>
    <div id="new">
        Foo
        Bar
    </div>
    <div>Abc</div>
    <div>Xyz</div>
</body>

作为新手,我了解innerHTML和jQuery wrap的基本知识,但代码如下:

代码语言:javascript
复制
var foo = document.body.innerHTML;
console.log(foo);

给我完整的身体,包括AbcXyz div。所以,这并不能解决问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-06 17:22:26

您可以通过使用contents().filter()检索文本节点,然后使用wrapAll()将它们放置在新的div元素中来实现这一点。试试这个:

代码语言:javascript
复制
$('body').contents().filter(function() {
  return this.nodeType == 3 && this.textContent != '';
}).wrapAll('<div id="new" />');
代码语言:javascript
复制
/* only to show the new div exists... */
#new { border: 1px solid #C00; }
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Foo
Bar
<div>Abc</div>
<div>Xyz</div>

票数 4
EN

Stack Overflow用户

发布于 2017-01-06 17:24:27

非jQuery解决方案:

可以遍历主体的所有子节点,并将每个文本节点移动到新元素,直到到达第一个元素节点为止。示例:

代码语言:javascript
复制
var div = document.createElement('div');
div.id = 'new';
var childNodes = document.body.childNodes;
while (childNodes[0].nodeType !== Node.ELEMENT_NODE) {
  div.appendChild(childNodes[0]);
}
document.body.insertBefore(div, childNodes[0]);
代码语言:javascript
复制
#new {
  color: red;
}
代码语言:javascript
复制
Foo
Bar
<div>Abc</div>
<div>Xyz</div>

票数 3
EN

Stack Overflow用户

发布于 2017-01-06 17:22:40

你可以使用.contents().filter().prependTo()。若要保留新行字符,请将#new css white-space属性设置为pre

代码语言:javascript
复制
var nodes = $("body").contents().filter(function() {
  return this.nodeType === 3 && /Foo|Bar/.test(this.textContent) 
});

$("<div></div>", {
  id:"new",
  html: nodes,
  css: {whiteSpace: "pre"}
}).prependTo("body")
代码语言:javascript
复制
#new {
  color: sienna;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>

Foo

Bar

<div>Abc</div>

<div>Xyz</div>

</body>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41510807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档