javascript - Jquery 包装元素
问题描述
我有一些 HTML 输出需要用新的 div (.container) 包装。有时 span.diary-film-name 后面会跟一些链接 a.film-tickets-link。如果链接在那里,我希望它们也包含在 .container div 中。
让我澄清一下,我无法更改 HTML 输出,因此采用了这种方法。
我可以使用下面的行来包装 span.diary-film-name 但我不确定是否包装以下链接(如果存在)?
$( ".diary-film-name" ).wrap( "<div class='container'></div>" );
这就是我所拥有的:
<span class="diary-film-name">
<a href="#">Toy Story 1</a>
</span>
<a class="film-tickets-link" href="#">5.20pm</a>
<a class="film-tickets-link" href="#">7.40pm</a>
<span class="diary-film-name">
<a href="#">Toy Story 2</a>
</span>
这就是我想用新的 .container div 显示的内容:
<div class="container">
<span class="diary-film-name">
<a href="#">Toy Story 1</a>
</span>
<a class="film-tickets-link" href="#">5.20pm</a>
<a class="film-tickets-link" href="#">7.40pm</a>
</div>
<div class="container">
<span class="diary-film-name">
<a href="#">Toy Story 2</a>
</span>
</div>
我这样做是为了如果里面没有 .film-ticket-links ,我可以删除容器,即
$('.container').not(':has(.film-tickets-link)').remove();
编辑:我唯一能做到的就是在跨度之前和之后添加一个<br>。这是我可以对原始输出进行的唯一更改:
$('.my-page br').each(function(){
$(this).nextUntil('.my-page br').wrapAll(document.createElement('div'));
});
我已经设法解决了这个...
$(".diary-film-name").each(function(){
$(this).nextUntil(".diary-film-name").andSelf().wrapAll('<div class="container"> </div>')
})
解决方案
编辑用 each() 编辑
正如您所说的 HTML 无法编辑,我将添加一个纯 jquery 解决方案:首先,按照您的方式进行操作,这将创建此结构:
<div class="container">
<span class="diary-film-name">
<a href="#">Toy Story 1</a>
</span>
</div>
<a class="film-tickets-link" href="#">5.20pm</a>
<a class="film-tickets-link" href="#">7.40pm</a>
因此,我们包装容器,然后选择具有 .film-tickets-link 类的同一级别中的所有元素,然后将它们附加到容器的末尾:
var containers = $( ".diary-film-name" ).wrap( "<div class='container'></div>" ).parent();
containers.each(function(index, element){
const links = $(this).nextUntil('.container');
links.appendTo(element);
})
这里的问题是容器类,它必须是唯一的(如果不是,它将不起作用,您可以使用 id 或从具有唯一标识符的 api 填充的某些数据字段)我没有“编译”它,所以也许有是一些语法错误,但逻辑没问题。
老的
如果您使用跨度容器
.diary-film-name
如果链接存在并且你用它包装它,下面的链接将在容器之外,我的建议是更改 HTML 的结构,在 .diary-film-name 顶部添加一个跨度,这将包装文件名和过滤链接
<div class="container">
<span class="content-container">
<span class="diary-film-name">
<a href="#">Toy Story 1</a>
</span>
<a class="film-tickets-link" href="#">5.20pm</a>
<a class="film-tickets-link" href="#">7.40pm</a>
</span>
</div>
然后代替
$( ".diary-film-name" ).wrap( "<div class='container'></div>" );
做:
$( ".content-container" ).wrap( "<div class='container'></div>" );
推荐阅读
- javascript - Javascript 和关联数组
- powershell - 如何从注册表项安静地运行 powershell?
- elasticsearch - ElasticSearch 不得(必须(A 和 A 和 C)或(D 和 E 和 F)
- database - Oracle RDS中如何连接多个Schema
- c# - 调试器中的 Visual Studio @ 符号前缀
- django - Django删除多对多字段
- python - 将 XML 转换为 csv 时出现 KeyError
- linux-kernel - Linux 内核 Intel 视频驱动程序 (i915) 版本之间的背光亮度差异
- ios - 使用 REGEX 快速密码验证
- python - 如何打乱熊猫数据框的每一列?