【问题标题】:Insert <div> outside every three <li>每三个 <li> 外插入 <div>
【发布时间】:2010-06-16 15:21:08
【问题描述】:

我有这样的事情:

function cat_filter() {
    $.ajax({
        type: "POST",
        url: 'json/cat_filter.aspx',
        data: "catId=" + "&styleId=" + "&colourId=" + "&sizeId=" + "&minPrice=" + "&maxPrice=",
        dataType: "json",
        beforeSend: function () {
            //load loading cursor
        }, success: function (data) {
            var CatItems = "";

            for (var x = 0; x < data.PRODUCTS.length; x++) {
                CatItems += '<li class="jcarousel-item jcarousel-item-horizontal jcarousel-item-' + [x] + ' jcarousel-item-' + [x] + '-horizontal jcarousel-item-placeholder jcarousel-item-placeholder-horizontal"><a class="large_image" href="#"><img  src="' + data.PRODUCTS[x].product_img + '" alt="' + data.PRODUCTS[x].product_name + '"></a><h3 class="geo_17_darkbrown">' + data.PRODUCTS[x].product_name + '</h3>';

                if (data.PRODUCTS[x].product_onsale == 1) {
                    CatItems += '<img alt="sale" src="assets/images/sale.gif" class="sale"><span class="geo_17_red_linethr">&pound;' + data.PRODUCTS[x].product_retailprice + '</span>&nbsp;&nbsp;<span class="price geo_17_darkbrown">&pound;' + data.PRODUCTS[x].product_webprice + '</span>';
                } else {
                    CatItems += '<span class="price geo_17_darkbrown">&pound;' + data.PRODUCTS[x].product_webprice + '</span>';
                }

                if (data.PRODUCTS[x].product_COLOURS) {
                    CatItems += '<span class="colour">';

                    for (var y = 0; y < data.PRODUCTS[x].product_COLOURS.length; y++) {

                        CatItems += '<span><a href="' + data.PRODUCTS[x].product_COLOURS[y].colours_large + '"><img src="' + data.PRODUCTS[x].product_COLOURS[y].colours_thumb + '" alt="' + data.PRODUCTS[x].product_COLOURS[y].colour_name + '" /></a></span>';
                    }

                    CatItems += '</span>';
                }

                CatItems += '</li>';

            }
            $('.carousel_00 ul').html(CatItems);
        }, complete: function () {
            //remove loading cursor
        }
    });
}

此代码生成此 html:

    <div class="carousel_00">
        <ul>            
            <li><a href="#" class="large_image"><img  src="assets/images/dress1.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            <span class="colour">
                <span><a href="assets/images/big_image_1.gif"><img src="assets/images/black.gif" alt="balck"></a></span>
                <span><img src="assets/images/brown.gif" alt="brown"></span>
                <span><img src="assets/images/purple.gif" alt="purple"></span>
            </span>
            </li>
            <li><a href="#"><img  src="assets/images/dress2.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
            <li><img class="sale" src="assets/images/sale.gif" alt="sale" /><a href="#"><img  src="assets/images/dress3.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="geo_17_red_linethr">&pound;99.99</span>&nbsp;&nbsp;<span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
            <li><a href="#"><img  src="assets/images/dress1.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;59.99</span>
            </li>
            <li><a href="#"><img  src="assets/images/dress2.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
            <li><a href="#"><img  src="assets/images/dress3.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
            <li><a href="#"><img  src="assets/images/dress1.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
            <li><a href="#"><img  src="assets/images/dress2.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
            <li><a href="#"><img  src="assets/images/dress3.gif" alt="image"></a>
            <h3 class="geo_17_darkbrown">Rachel Dress</h3>
            <span class="price geo_17_darkbrown">&pound;89.99</span>
            </li>
        </ul></div>

我需要的是每 3 li 将在 div /div 中。 我知道这不符合语义,也不正确,但这只是举例。 (基本上,如果我想知道如何做到这一点,我将替换 li 在 spans 上,而我需要在 li 之外的 div 在 li 上)。

如果有人能帮助我,我会很高兴。因为我拥有的代码对我来说已经太多了。

【问题讨论】:

  • 你不能将 li 作为 div 的子元素,如果你告诉浏览器做一些不可能的事情,那么有些人会去做,有些人会试图弄清楚你的真正意思。然后,弄清楚发生了什么就变成了一场噩梦。 不要尝试这个。直接生成有效文件。
  • 如果你没有读到我的帖子,我将在这里重复最后一部分。我知道这不是语义的,也不正确,但这只是举例。 (基本上,如果我想知道如何做到这一点,我将替换 li's on spans 和我在 li's on li 之外需要的那个 div)。这不是生产代码,如果我找到解决方案,我会重写它。
  • 这不是“只是”语义——插入一个空的 li,在其上附加一个 ul,然后将前 3 个 lis 附加到新的 ul。重复,直到你离开 lis。否则浏览器将重写代码以将 lis 保留在 uls 中。

标签: javascript jquery json


【解决方案1】:

你可以先在循环中添加这个:

if (x % 3 === 0) CatItems += '<div>';

这是循环中的最后一个:

if (x % 3 === 2 || x = data.PRODUCTS.length - 1) CatItems += '</div>';

这将对li 项目三和树进行分组。如果您只希望每个组中的第一个 li 周围有 div,则第二个条件将与第一个条件相同。

(让我重复一下你在问题中所说的这在语义上不正确。)

【讨论】:

    【解决方案2】:

    我不会使用字符串,而是使用 dom 函数(document.createElement 和 element.appendChild)。但是如果我坚持你的方法,它会是这样的:

                   success: function(data) {
                       var CatItems = "";
    
                       for(var x=0; x < data.PRODUCTS.length; x++) {
                            if(x%3==0)
                                CatItems += "<div>";
                            CatItems += '<li class="jcarousel-item jcarousel-item-horizontal jcarousel-item-'+[x]+' jcarousel-item-'+[x]+'-horizontal jcarousel-item-placeholder jcarousel-item-placeholder-horizontal"><a class="large_image" href="#"><img  src="'+ data.PRODUCTS[x].product_img +'" alt="' + data.PRODUCTS[x].product_name +'"></a><h3 class="geo_17_darkbrown">' + data.PRODUCTS[x].product_name +'</h3>';
    
                            if ( data.PRODUCTS[x].product_onsale==1 ) {
                                CatItems += '<img alt="sale" src="assets/images/sale.gif" class="sale"><span class="geo_17_red_linethr">&pound;'+ data.PRODUCTS[x].product_retailprice +'</span>&nbsp;&nbsp;<span class="price geo_17_darkbrown">&pound;'+ data.PRODUCTS[x].product_webprice +'</span>';
                            } else {
                                CatItems += '<span class="price geo_17_darkbrown">&pound;'+ data.PRODUCTS[x].product_webprice +'</span>';
                            }
    
                            if ( data.PRODUCTS[x].product_COLOURS ) {
                                CatItems += '<span class="colour">';
    
                                for(var y=0; y < data.PRODUCTS[x].product_COLOURS.length; y++) {
    
                                    CatItems += '<span><a href="'+ data.PRODUCTS[x].product_COLOURS[y].colours_large +'"><img src="'+ data.PRODUCTS[x].product_COLOURS[y].colours_thumb +'" alt="'+ data.PRODUCTS[x].product_COLOURS[y].colour_name +'" /></a></span>';
                                }
    
                                CatItems += '</span>';
                            }
    
                            CatItems += '</li>';
    
                            if(x%3==0)
                                CatItems += "</div>";
    
                       }
                       $('.carousel_00 ul').html(CatItems);
                   },
    

    【讨论】:

    • % - 这是模数运算符。如果您将两个数字相除,它将返回整数余数。
    • @Robert 是的,如果它等于 0,这是因为你已经通过了 3 li
    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2012-02-18
    • 2013-07-08
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多