javascript - jQuery 克隆列表项在使用each() 函数时都获得相同的文本值

标签 javascript jquery clone each zepto

我正在尝试克隆 DOM 中的列表项,并根据变量 data 中使用each 函数的文本值数量将其追加多次。问题是所有新列表项都获得相同的文本值(所有列表项都设置为等于最后附加的列表项)。 我认为这与外壳有关,但我无法弄清楚。

谁能解释一下问题是什么?

谢谢!

数据:

    var data = {"text1": ["text1_row1", "text1_row2"], "text2": ["text2_row1", "text2_row2"], "text3": ["text3_row1", "text3_row2"] }

HTML:

    <ul>
        <li id="entryTemplate" style="display:none">
            <span class="text1"></span>
            <span class="text2"></span>
            <span class="text3"></span>
        </li>
    </ul>

Javascript:

function listData(data){
    $.each(data.text1, function(i) {
        var newDataRow = $('#entryTemplate').clone();   
        newDataRow.removeAttr('id')
             .removeAttr('style')
             .removeAttr('class')
             .addClass('copy')
             .appendTo('ul')
             .find('.text1').text(data.text1[i])
             .find('.text2').text(data.text2[i])
             .find('.text3').text(data.text3[i]);
    });
}

$.fn.clone = function(){
    var ret = $();
    this.each(function(){
        ret.push(this.cloneNode(true))
    });
    return ret;
};

所需的 HTML:

    <ul>
        <li id="entryTemplate" style="display:none">
            <span class="text1"></span>
            <span class="text2"></span>
            <span class="text3"></span>
        </li>
        <li class="copy">
            <span class="text1">text1_row1</span>
            <span class="text2">text2_row1</span>
            <span class="text3">text3_row1</span>
        </li>
        <li class="copy">
            <span class="text1">text1_row2</span>
            <span class="text2">text2_row2</span>
            <span class="text3">text3_row2</span>
        </li>

    </ul>

我得到的结果(所有 li 项目都获取 row2 的文本):

    <ul>
        <li id="entryTemplate" style="display:none">
            <span class="text1"></span>
            <span class="text2"></span>
            <span class="text3"></span>
        </li>
        <li class="copy">
            <span class="text1">text1_row2</span>
            <span class="text2">text2_row2</span>
            <span class="text3">text3_row2</span>
        </li>
        <li class="copy">
            <span class="text1">text1_row2</span>
            <span class="text2">text2_row2</span>
            <span class="text3">text3_row2</span>
        </li>

    </ul>

最佳答案

你的问题有点模糊,不太清楚你想要的结果是什么。除此之外,我在你的代码中看到了一些可能导致它的原因。尝试一下并让我知道发生了什么。

当你这样做时

$.each(data.text1, function(i) {

更改为

$.each(data.text1, function(pos, element) {

并将 [ i ] 替换为 [element]。

根据JQuery API,当执行EACH循环时,第一个返回的是数组中的位置,第二个返回的是值本身。

关于javascript - jQuery 克隆列表项在使用each() 函数时都获得相同的文本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489510/

相关文章:

javascript - RadioButton 不访问搜索使用 Jquery Ajax

php - Datepicker根据服务器日期/时间获取日期

javascript - 在 <img> 标签中显示 Canvas 图像的一部分

javascript - 附加 html 的不同方式?

python - 在 Python 中使用循环创建交替字典

javascript - 使用 JavaScript 对 JSON 文件或至少一个下拉列表进行排序的替代方法?

javascript - jQuery - 每次切换不同的类一次

javascript - 如何使用jquery在页面加载后在数字中添加逗号格式

c# - 在 C# 中使用 Moq 对克隆方法进行单元测试

version-control - 使用 Fossil 克隆存储库?