【问题标题】:How to wrap <li> tags inside <ul> tags [duplicate]如何将 <li> 标签包装在 <ul> 标签内 [重复]
【发布时间】:2014-07-25 12:41:53
【问题描述】:

我有这个,当我单击 .items 类中的按钮时,会创建像这样的 &lt;li&gt; 元素:

<ul class="items">                                           <ul class="items">
    <li>img1</li>                                                <ul>
    <li>img2</li>       but i want every 3 <li>                      <li>img1</li>
    <li>img3</li>       to wrap them into a new <ul>                 <li>img2</li>
    <li>img4</li>       --------------------------------->           <li>img3</li>
    <li>img5</li>                                                </ul>
    <li>img6</li>                                                <ul>
    <li>img7</li>                                                    <li>img4</li>
    <li>img8</li>                                                    <li>img5</li>
    <li>img9</li>                                                    <li>img6</li>
    ...                                                          </ul>
</ul>                                                            ...
                                                             </ul>       

index.php

<div class="articles" id="projects">
    <div class="items">
        <li class="item">

            <img class="proj-imgs" src="images/project-imgs/" data-field="projects" width="100%" height="100%">

        </li>
    </div>
    <div class="morebox">
        <a href="#" class="items-load">Load more</a>
    </div>
</div>

我尝试了这些但没有运气:

第一次尝试:

$('.item').first().before("<ul>");
$('.item').last().after("</ul>");

第二次尝试:

$( "<ul>" ).insertBefore( ".item:first-child" );
$( "</ul>" ).insertAfter( ".item:last-child" );

第三次尝试:

$( ".items" ).prepend( "<ul>" );
$( ".items" ).append( "</ul>" );

第四次尝试:

$(".items li").each(function() {
    $(this).find("li").wrapAll("<ul></ul>");
});

第五次尝试:

$('.items li').each(function(){
    var uls = $('li', this);
    for(var i = 0; i < uls.length; i+=3) {
        uls.slice(i, i+3).wrapAll('<ul></ul>');
    }
});

如果你能帮助我,我将不胜感激!!如果您想要其他文件,例如 javascript 文件、php 或数据库,请告诉我添加它们!提前致谢!

【问题讨论】:

  • 您的目标是无效的 HTML。您必须将uls 包装在lis 中,因为liul 中唯一有效的元素。
  • 首先,ul -> ul 不正确,ul 内部唯一允许的标签是 li。你想要 ul -> li -> ul。见 xhtml 快速参考:w3.org/2010/04/xhtml10-strict.html#elem_ul
  • 为什么需要更多的 UL?有必要吗?
  • 将 3 uls 与“项目”类适合你吗?

标签: javascript php jquery ajax json


【解决方案1】:

这不是 DOM 的工作方式,你不能单独插入开始和结束标签,你应该插入一个 元素。同样ul 不能是另一个ul 元素的子元素,它应该用li 元素包裹。要使用 &lt;li&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt; 包装每 3 个 lis,您可以使用 wrapAll 方法:

var $li = $('.items li');

for (var i = 0; i < $li.length; i+=3)
    $li.slice(i, i+3).wrapAll('<li><ul></ul></li>');

http://jsfiddle.net/zzRNQ/

【讨论】:

  • 我在没有&lt;li&gt; 的情况下尝试了此操作,例如(.wrapAll('&lt;ul&gt;&lt;/ul&gt;');),因为我更改了代码但不起作用.. 基本上,当我运行它时,它会在所有动态生成的 @ 之上创建一个 &lt;ul&gt; 元素987654332@ 元素。所以标记是这样的:&lt;div class="items"&gt;&lt;ul&gt;&lt;/ul&gt;&lt;li class="item"&gt;img1&lt;/li&gt;&lt;li class="item"&gt;img2&lt;/li&gt;&lt;li class="item"&gt;img3&lt;/li&gt;&lt;/div&gt;
  • 当 3 &lt;li&gt; .item 已经生成并且它工作时,我在 Firefox 的控制台中使用了代码......所以同步可能会发生一些事情......我不知道。 ..无论如何感谢您的帮助。我会将其标记为正确!
【解决方案2】:

你需要把新的 ul 放在一个 li 里面,你不能有 ul -> ul,这是无效的标记。

应该是这样的

<ul>
   <li>
      <ul>
         <li></li>
         <li></li>
         <li></li>
      </ul>
   </li>
   <li>
      <ul>
         <li></li>
         <li></li>
         <li></li>
      </ul>
   </li>
</ul>

在 jquery 中创建是这样的

var mainUl = $("<ul>");
mainUl.append($("<li>").append($("<ul>").append("<li>").append("<li>").append("<li>")))
mainUl.append($("<li>").append($("<ul>").append("<li>").append("<li>").append("<li>")))
mainUl.append($("<li>").append($("<ul>").append("<li>").append("<li>").append("li>")))

您可以更进一步,根据需要向“li”元素添加内容

【讨论】:

  • 这行不通..我认为如果行得通,那将是一个不好的做法!
  • 好吧,根据这个 js fiddle,它工作得很好jsfiddle.net/QBM5/dQAvL/2,至于最佳不良做法,它只是帮助你解决问题的支柱,而不是实施法令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 2012-03-13
  • 1970-01-01
  • 2014-03-07
相关资源
最近更新 更多