我有一个嵌套div中的项目列表,包含父级,祖父级和曾祖父级div
。 html代码如下所示:
<div class="marketing">
<div class="module-surround">
<div class="module-content">
<div class="k2ItemsBlock">
<ul>
<li><div>4</div></li>
<li><div>5</div></li>
<li><div>6</div></li>
<li><div>7</div></li>
</ul>
</div>
</div>
</div>
</div>
我想将所有列出的项目转换为父div,并使用所有列出的项目来替换伟大的父级div,以便整体代码如下所示:
<div><div>4</div></div>
<div><div>5</div></div>
<div><div>6</div></div>
<div><div>7</div></div>
根据我的逻辑,我想使用jQuery来实现这一点,到目前为止,我能够将所有元素放入一个列出的项目.K2ItemsBloc ul到一个变量中并用列表替换div.marketing,my jQuery代码就是这样做的
//1. Get all content in K2ItemsBlock ul into a variable called mlist
var mlist = $(".k2ItemsBlock ul").contents()
//2. Change all li HTML elements inside the variable mlist to div
//3. Replace div.marketing with the variable mlist
$(".marketing").replaceWith(mlist);
上面的没有任务#2的jQuery代码将原始代码转换为
<li><div>4</div></li>
<li><div>5</div></li>
<li><div>6</div></li>
<li><div>7</div></li>
我现在可以弄清楚的是在用它替换div.marketing之前转换变量mlist中所有li元素的语法。
有任何建议或想法吗?
答案 0 :(得分:4)
不确定div是否是ul
元素的有效子元素..但您可以这样做
$('.k2ItemsBlock li>div').unwrap() // <--- removes the li
.wrap('<div/>'); // <-- adds the div
编辑我编辑添加li>div
只是为了使其更具体
如果您只想影响顶级li / div,请将您的选择器更改为此
$('.k2ItemsBlock > ul > li > div') // <-- ">" is direct child selector
答案 1 :(得分:0)
完整的解决方案是:
var marketing = $(".marketing");
var content = marketing.children().remove();
content.find(".k2ItemsBlock li>div").unwrap().wrap("<div>");
marketing.replaceWith(content.find(".k2ItemsBlock li>div");
这应该抓住除顶级div之外的所有内容。从dom中删除它,在Javascript中执行操作以提高效率。然后用生成的html替换顶级div。
答案 2 :(得分:0)
mlist = mlist.replace('/li/g','div');
应该这样做。可能更好地替换<li>
和</li>
,这样您就不会意外地替换实际的字母li(如果有的话)。
mlist = mlist.replace('/<li>/g','<div>').replace('/<\/li>/g','</div>');
你明白了。
答案 3 :(得分:0)
// Get an array of li elements
var mlist = $(".k2ItemsBlock ul li");
// new array of div's containing the content of li elements
var dlist = mlist.map(function(i, val){return "<div>" + $(val).html() + "</div>";});
// join div array into a single string
var result = dlist.toArray().join('');