用JavaScript/jQuery包装一组混合的文本节点和HTML元素
Wrap a mixed set of text nodes and HTML elements with JavaScript / jQuery
我有这个HTML
<div class="box">
<a href="#goals"> | <a href="#rules"> | <a href="#controls">
<p><a name="goals"></a></p>
<h2>Goals</h2>
... yada yada
并且想要这样。
<div id="nav">
<a href="#goals"> | <a href="#rules"> | <a href="#controls">
</div>
JQuery有wrapAll(),但我只能选择链接,这样"|"就留在了div之外。
before('div')和after('div`)创建了一个封闭元素,比如<div></div>
,那么该怎么办呢?
我正在使用
$('.box a[href^="#"]')
以选择链接。它们是文本资源文件的一部分,所以我不能编辑任何内容。
给定有效的标记作为输入,这是有效的:
// find first link - using jQuery for expedience here
var a = $('.box > a')[0];
// create new div, and insert it before the link
var d = document.createElement('div');
d.id = 'nav';
a.parentNode.insertBefore(d, a);
// for each following node, reparent it inside the div
while (a && a.tagName !== 'P') {
var n = a.nextSibling;
d.appendChild(a);
a = n;
};
实际上,没有jQuery会更容易,因为jQuery没有提供简单的方法来获取菜单中包含的文本节点。
正在进行演示http://jsfiddle.net/HpgJV/3/
要修复不正确的HTML输入,请尝试以下操作:
$('.box a[href^="#"]').each(function() {
$(this).contents().insertAfter(this);
});
这将移动由于无效标记而在CCD_ 2标签内丢弃的的任何文本节点。
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 用程序搜索JQuery数据表中的文本
- jQuery匹配JSON对象的部分文本
- onkeyup无法动态创建多个文本区域
- 如何在下面的ES6循环中获得前面的文本
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 借助asp.net验证或java脚本对多个文本进行验证
- 无法在ajaxStart中更改跨度文本
- 高亮显示时编辑文本大小和颜色
- 如何在树枝模板中包含已解释和未解释文本的混合
- 如何本地化节点.js应用程序,每个区域设置具有不同的单词位置,混合静态和动态本地化文本
- 如何使用underscore.js对文本混合数字进行排序
- 调用replaceWith会给出“;而不是函数“;错误(将文本节点替换为文本和html的混合)
- 用JavaScript/jQuery包装一组混合的文本节点和HTML元素
- 字符串替换混合文本和HTML(客户端或服务器端)
- 在Javascript中混合变量和文本
- 如何将HTML元素添加到与文本混合的存储中