如何将 class 添加到位于 .html() 变量中的 <li>?
How to add class to <li> located within a .html() variable?
我有一个变量,用于保存某个 div 的 HTML:
var menu = $(".menu").html();
保存的 html() = var menu
看起来如下:
<li>
<a href="#">item 1</a>
</li>
<li>
<a href="#">item 2</a>
</li>
然后将两个 <li>
复制到另一个 div
otherDiv.append(menu);
问题: 我想向 .html() 中包含的每个 <li>
添加一个 class在我将它们附加到 otherDiv
之前。原来的<li>
不能碰,需要保持原状。
一种方法:
var menu = $('.menu')
// cloning the found element(s), preserving event-handlers:
.clone(true, true)
// finding the descendant <li> elements:
.find('li')
// adding the 'newClass' class-name to those found <li> elements:
.addClass('newClass')
// returning to the original selection ('.menu'):
.end()
// retrieving the innerHTML:
.html();
var menu = $('.menu').clone(true, true).find('li').addClass('newClass').end().html();
$('#otherElement').html(menu);
li a {
color: #f00;
}
li.newClass a {
color: #0f0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu">
<li>
<a href="#">item 1</a>
</li>
<li>
<a href="#">item 2</a>
</li>
</ul>
<ol id="otherElement"></ol>
参考文献:
试试 jQuery 的 .clone():
var menu = $(".menu").clone().html();
它将创建一个深拷贝,然后您可以将 class 添加到每个包含的 <li>
。这样你就不会改变原始元素。
尝试利用 .append( function ) , jQuery.parseHTML
var menu = $(".menu").html(), name = "other-menu";
$("#otherDiv").append(function() {
return $.parseHTML(menu).map(function(html) {
html.className = name;
return html.outerHTML
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<ul class="menu">
<li>
<a href="#">item 1</a>
</li>
<li>
<a href="#">item 2</a>
</li>
</ul>
<ul id="otherDiv">
</ul>
没有 .clone()
的另一种方法可能是
var menu = $(".menu").html();
otherDiv.append(menu).find("li").addClass("test");
原始 li
元素保持不变。我没有看到在附加元素后添加 class 的区别。
我有一个变量,用于保存某个 div 的 HTML:
var menu = $(".menu").html();
保存的 html() = var menu
看起来如下:
<li>
<a href="#">item 1</a>
</li>
<li>
<a href="#">item 2</a>
</li>
然后将两个 <li>
复制到另一个 div
otherDiv.append(menu);
问题: 我想向 .html() 中包含的每个 <li>
添加一个 class在我将它们附加到 otherDiv
之前。原来的<li>
不能碰,需要保持原状。
一种方法:
var menu = $('.menu')
// cloning the found element(s), preserving event-handlers:
.clone(true, true)
// finding the descendant <li> elements:
.find('li')
// adding the 'newClass' class-name to those found <li> elements:
.addClass('newClass')
// returning to the original selection ('.menu'):
.end()
// retrieving the innerHTML:
.html();
var menu = $('.menu').clone(true, true).find('li').addClass('newClass').end().html();
$('#otherElement').html(menu);
li a {
color: #f00;
}
li.newClass a {
color: #0f0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu">
<li>
<a href="#">item 1</a>
</li>
<li>
<a href="#">item 2</a>
</li>
</ul>
<ol id="otherElement"></ol>
参考文献:
试试 jQuery 的 .clone():
var menu = $(".menu").clone().html();
它将创建一个深拷贝,然后您可以将 class 添加到每个包含的 <li>
。这样你就不会改变原始元素。
尝试利用 .append( function ) , jQuery.parseHTML
var menu = $(".menu").html(), name = "other-menu";
$("#otherDiv").append(function() {
return $.parseHTML(menu).map(function(html) {
html.className = name;
return html.outerHTML
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<ul class="menu">
<li>
<a href="#">item 1</a>
</li>
<li>
<a href="#">item 2</a>
</li>
</ul>
<ul id="otherDiv">
</ul>
没有 .clone()
的另一种方法可能是
var menu = $(".menu").html();
otherDiv.append(menu).find("li").addClass("test");
原始 li
元素保持不变。我没有看到在附加元素后添加 class 的区别。