【问题标题】:Replace <ul> instance with another one用另一个替换 <ul> 实例
【发布时间】:2016-01-13 02:03:12
【问题描述】:

我在&lt;ul&gt; 元素中设置了数据,用于在单击状态时显示状态数据。默认情况下,我希望有 3 列显示“选择一个状态”,当用户单击给定状态时,数据会显示出来。正在发挥作用的一个问题是尝试用另一个 &lt;ul&gt; 替换 &lt;ul&gt; 类而不更改所有 3 个?我附上了一个 JSFiddle,你可以更清楚地看到我想要做什么。我想单击一个状态并让 &lt;ul&gt; 的内容填充默认列之一。出于显而易见的原因,&lt;ul&gt; 是一个类,它会更改该类的所有实例,但我想知道是否有办法改为更改 1 个实例?

(http://jsfiddle.net/5xyrv1w1/)

【问题讨论】:

  • 不要试图通过将链接格式化为代码来欺骗系统。只需包含代码。 How to create a Minimal, Complete, and Verifiable example.
  • 很抱歉,您的描述或您的小提琴并不清楚您要做什么。您是否尝试用状态数据替换显示“选择一个州”的
      ?如果是这样,为什么要使用
        来表示“选择一个状态”。只需将其设为 div 并将所选状态附加到 div 即可。然后向 div 添加一个“填充”类,以便您知道它已插入状态数据。
  • 正确。无论哪种方式,您不是还在向其中注入带有数据的
      吗?或者您是说要添加一个 div,其中的数据线被
      分割?我只是认为列表会是一种更简洁的方式来从语义上显示数据。此外,这是最终产品的熊骨头版本。根据数据,背景颜色会有所不同,所以我觉得将每个数据点放在一个列表项中是值得的
  • 我更新了 Fiddle 以更详细地展示它。如果我选择纽约,我想用纽约数据替换“选择一个州”行之一。将它们删除是一个完全不同的问题,但是一旦我可以让它们替换默认列,我就会着手解决这个问题

标签: jquery css replace html-lists


【解决方案1】:

看看这个小提琴:http://jsfiddle.net/5xyrv1w1/2/

我已从您的列中删除了所有内容,但您的文字除外。我已将您的数据包装在一个 div 中。现在我可以从一个 div 中获取 html 并使其成为另一个 div 的 html。带有数据的隐藏 div 仍然存在。我只是用它们来填充一个空的“选择一个州”div。

HTML:

<button class="NY">New York</button>
<button class="GA">Georgia</button>
<button class="FL">Florida</button>


            <div id="state-columns-container">
                <div class="pick-a-state-column" data-value="Choose a state">
                    Choose a state
                </div>

                <div class="pick-a-state-column" data-value="Choose a state">
                    Choose a state
                </div>

                <div class="pick-a-state-column" data-value="Choose a state">
                    Choose a state
                </div>


                <div id="NY" class="state-data">
                    <ul id="NY-state-column" data-value="newyork">
                        <li class="state-title-chosen univers-bold">
                            <span class="close-state">X</span>New York
                        </li>
                        <li>Some data</li>
                        <li>More data</li>
                        <li>A bit more</li>
                        <li>Last data</li>
                    </ul>
                </div>

                <div id="GA" class="state-data">
                    <ul id="GA-state-column" data-value="georgia">
                        <li class="state-title-chosen univers-bold">
                            <span class="close-state">X</span>Georgia
                        </li>
                        <li>Some data</li>
                        <li>More data</li>
                        <li>A bit more</li>
                        <li>Last data</li>
                    </ul>
                </div>

                <div id="FL" class="state-data">
                    <ul id="FL-state-column" data-value="florida">
                        <li class="state-title-chosen univers-bold">
                            <span class="close-state">X</span>Florida
                        </li>
                        <li>Some data</li>
                        <li>More data</li>
                        <li>A bit more</li>
                        <li>Last data</li>
                    </ul>
                </div>
            </div>

CSS:

ul {
    list-style-type: none;
}
#state-columns-container { 
    padding: 30px;    
}

.pick-a-state-column {
  width: 200px;
  float: left;
  text-align: center;
}

.pick-a-state-column ul { position: relative; }

.close-state {
  position: absolute;
  top: 7px;
  right: 7px;;
  cursor: pointer;
}

.state-data { display: none; }

jQuery:

$(function(){
    $('button').click(function() {
        var $className = $(this).attr('class');
        var emptyCol = $('.pick-a-state-column').not('.filled')[0];
        if(emptyCol){
            $(emptyCol).html($('#' + $className).html());
            $(emptyCol).addClass('filled');
        }
    });

    $(document).on('click', '.close-state', function() {
        var $col = $(this).closest('.pick-a-state-column');
        $col.html($col.data('value'));
        $col.removeClass('filled');
    });
});

【讨论】:

  • 这很好用 - 谢谢!我想了解更多有关解决方案的信息。我看到您正在向列中添加一个“.filled”类,但没有与之关联的样式。有什么具体原因吗?另外,为什么将列表放入 div 会使该过程更易于访问?仅替换
      元素而不是将它们嵌套在 div 中会更难吗?无论哪种方式,解决方案似乎都有效。我将实施这一点,并希望它工作顺利。干杯
  • “填充”类用于按钮单击处理程序,以便它选择尚未填充数据的列。如果您单击“纽约”,它将用数据填充第一列。单击“Georgia”,它将填充第二个。您不希望它覆盖第一列中的数据,因此您必须找到一个空列。所以使用 $('.pick-a-state-column').not('.filled')[0];获取未填充的第一列。
    • 放在 div 里面做了两件事。首先,我为每个按钮添加了一个 ID,该 ID 与按钮中的值相匹配,从而可以轻松找到正确的 div,从中获取我的数据。但更重要的是。很容易得到 div 的 $(div).html(),它是你的整个
        元素。然后将其用作列 $(column).html($(div).html());
    的 html
  • 这是一个非常有用的解释。谢谢
  • 没问题。如果您喜欢这个答案,请将其标记为正确答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2022-07-21
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
相关资源
最近更新 更多