简体   繁体   English

如何使用jQuery将所有li元素包装在ul元素中?

[英]how to wrap all li element inside ul element using jQuery?

I have this html: 我有这个HTML:

<li>
    <a href=""></a>
    <ul class="parent">
        <li><a href="">one</a></li>
        <li><a href="">two</a></li>
        <li><a href="">three</a></li>
        <li><a href="">four</a></li>
        <li><a href="">five</a></li>
        <li><a href="">six</a></li>
    </ul>
</li>
<li>
    <a href=""></a>
    <ul class="parent2">
        <li><a href="">one</a></li>
        <li><a href="">two</a></li>
        <li><a href="">three</a></li>
        <li><a href="">four</a></li>
        <li><a href="">five</a></li>
        <li><a href="">six</a></li>
    </ul>
</li>
<div class="all"></div>

I am using following jQuery code to get all li elements of .parent class and want to show that all li elements to div class called .all . 我正在使用以下jQuery代码来获取.parent类的所有li元素,并希望显示div类中.all名为.parent li元素。

<script>
$(".all").prepend("<ul>");
$( ".parent li" ).each(function( index ) {
    $(".all").append("<li>" + $(this).text() + "</li>");
});
$(".all").prepend("</ul>");
</script>

now it's adding to .all div class but <ul> and </ul> element is adding above the li elements but it's should be wrap the all li elements. 现在它已添加到.all div类中,但<ul></ul>元素被添加到li元素之上,但是应该将所有li元素包装起来。

what I want for eg: 我想要的例如:

<ul>
    <li>one</li>
    res of the li..
</ul>

but showing: 但显示:

<ul></ul>
<li>one</li>
res of the li..

 $(".all").prepend("<ul>"); $( ".parent li" ).each(function( index ) { $(".all ul").append("<li>" + $(this).text() + "</li>"); }); $(".all").prepend("</ul>"); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li> <a href=""></a> <ul class="parent"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <li> <a href=""></a> <ul class="parent2"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <div class="all"></div> 

Your code 您的密码

$(".all").append("<li>" + $(this).text() + "</li>");

Should be changed 应该改变

$(".all ul").append("<li>" + $(this).text() + "</li>");

For append elements inside the <ul> just use find() over the <div> element with class .all to find the new appended <ul> tag, and then add alls the <li> on it: 对于<ul>内的append元素,只需在类.all<div>元素上使用find()来查找新的追加的<ul>标记,然后在其上添加<li> alls:

<script>
$(".all").append("<ul>");
var ul = $(".all").find("ul");

$( ".parent li" ).each(function( index )
{
    ul.append("<li>" + $(this).text() + "</li>");
});
</script>

You can check the next working example: 您可以检查下一个工作示例:

 $(".all").append("<ul>"); var ul = $(".all").find("ul"); $( ".parent li" ).each(function( index ) { ul.append("<li>" + $(this).text() + "</li>"); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li> <a href=""></a> <ul class="parent"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <li> <a href=""></a> <ul class="parent2"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <div class="all"></div> 

The jquery code can be rewritten like this: jQuery代码可以这样重写:

 $(".all").append("<ul>"); $( ".parent li" ).each(function( index ) { $(".all ul").append("<li>" + $(this).text() + "</li>"); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li> <a href=""></a> <ul class="parent"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <li> <a href=""></a> <ul class="parent2"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <div class="all"></div> 

You're getting the problem because you're using prepend method as a wrong way. 您遇到问题是因为您使用prepend方法是错误的方式。

.prepend is used to add an element to the selector. .prepend用于将元素添加到选择器。 Since you added ul tag using $(".all").prepend("<ul>"); 由于您使用$(".all").prepend("<ul>");添加了ul标签$(".all").prepend("<ul>"); . You don't need to add this tag again ( $(".all").prepend("</ul>"); ). 您无需再次添加该标签( $(".all").prepend("</ul>"); )。

Also, you're trying to append new li tag inside the div tag ( .all element). 另外,您尝试在div标签( .all元素)内附加新的li标签。 It can be fixed by adding ul inside the selector $(".all ul") 可以通过在选择器$(".all ul")添加ul来解决此问题$(".all ul")

You can use prependTo() 您可以使用prependTo()

 $(".all").prepend("<ul class='new'>"); $( ".parent li" ).each(function( index ) { $(".all").append("<li>" + $(this).text() + "</li>"); }); $(".all li").prependTo(".new"); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li> <a href=""></a> <ul class="parent"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <li> <a href=""></a> <ul class="parent2"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <div class="all"></div> 

No need to create a new <ul> or use loops. 无需创建新的<ul>或使用循环。 Simply duplicate the existing <ul> , find its <a> elements, and .unwrap() them: 只需复制现有的<ul> ,找到其<a>元素,然后.unwrap()它们进行.unwrap()

 $(".parent") .clone() //Duplicate the <ul> .appendTo(".all") //Put the copy in the <div> .find("a") //Find all of its <a> elements .contents().unwrap(); //Strip the <a> tag, but leave the text 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <li> <a href=""></a> <ul class="parent"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <li> <a href=""></a> <ul class="parent2"> <li><a href="">one</a></li> <li><a href="">two</a></li> <li><a href="">three</a></li> <li><a href="">four</a></li> <li><a href="">five</a></li> <li><a href="">six</a></li> </ul> </li> <div class="all"></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM