jQuery 从一个元素换行到另一个元素
jQuery wrap from one element to another
我在尝试将一些未包装的内容包装在div中时遇到了一些困难。代码如下所示:
<div class="wrap">
<div class="A1">some content</div>
<div class="A2">some content</div>
Unwrapped text
<div class="A3">some content</div>
<div class="B1">some content</div>
<div class="B2">some content</div>
Unwrapped text
<div class="B3">some content</div>
</div>
如您所见,我想做的是将所有 A 元素包装到一个div 中,并在两者之间包含解开的文本。然后,对 B 元素执行相同的操作。有什么想法吗?
将
文本节点包装在元素之间有点复杂,所以首先要做的是用跨度包装这些文本节点
var wrap = $('.wrap'),
html = wrap.contents();
html.filter(function(i, el) {
if (el.nodeType === 3 && el.nodeValue && el.nodeValue.trim().length)
$(el).wrap('<span class="wrapped_in" />');
});
然后就是反过来迭代孩子,然后把他们包起来
wrap.children().toArray().reverse().forEach(function(elem) {
if ( $(elem).closest('.wrapped').length > 0 || $(elem).hasClass('wrapped_in') )
return false;
var char = (elem.className || "_").charAt(0);
var elem = $('[class^="'+char+'"]');
$(elem.add(elem.prev('.wrapped_in'))).wrapAll('<div class="wrapped wrap_'+(++i)+'" />')
});
小提琴
如果出于某种原因您不希望文本节点包装在跨度中,只需在所有其他包装完成后解开它们
$('.wrapped_in').contents().unwrap()
这将起作用:
var split = function() {
var arr = ['A', 'B'];
for (var i in arr) {
var ch = arr[i];
$("<div class='" + ch + "'>").insertBefore("div[class*='" + ch + "']:first");
$("<div class='" + ch + "'>").insertAfter("div[class*='" + ch + "']:last");
}
}
.A,
.B {
border: 1px black solid;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrap">
<div class="A1">some content</div>
<div class="A2">some content</div>
Unwrapped text
<div class="A3">some content</div>
<div class="B1">some content</div>
<div class="B2">some content</div>
Unwrapped text
<div class="B3">some content</div>
</div>
<button onclick="split()">Split Divs</button>
相关文章:
- 使用jquery将单个换行符替换为span元素
- 将换行符写入<span>元素
- 范围和列表元素在 DIV 中换行
- 删除垂直滚动条而不附加元素换行
- 在javascript数组元素之间添加换行符
- 通过将文本替换为类来换行/中断列表元素
- 添加绝对定位的元素会导致换行
- 获取不带 html 标记的页面元素文本,但保留换行符
- jQuery 从一个元素换行到另一个元素
- 换行<td><a>标记,同时避免嵌套元素
- 换行HTML元素
- AngularJS:段落元素的换行符
- 强制不要对伪元素 (:after) 使用换行符
- 在绝对定位元素周围换行文本
- 克隆每个元素后添加换行符
- Regex将所有单词换行到span中,不包括img元素
- 动态添加的元素不换行
- Jquery换行集的元素与打开和关闭标记
- 如何在换行符上插入一个javascript textNode元素
- 在 JQuery 或 JavaScript 中使用 span 元素换行突出显示文本