【问题标题】:jQuery prepend() within a for loop after having picked up an array from a textareajQuery prepend() 在从 textarea 中获取数组后的 for 循环中
【发布时间】:2011-03-20 02:33:04
【问题描述】:

您好,感谢您的阅读。

我正在尝试允许用户将文本粘贴到 textarea 字段中,然后使用他们粘贴的内容。

应用程序的范围有限,但用户将粘贴 csv 文件的内容,其中第一列与我设置的 div Id 对齐。

出于某种原因,当我在此循环中发出警报时,它会完美地发出警报。问题是当我尝试 prepend() 内容而不是更改它们时,它什么也不做:

        $('#datainput').submit(function () {
        csvData = $("#csvData").val();
        csvData = csvData.split('\n');
        var iterationNum;
        var contentText;

        return function() {
            for (var i=0, lngth=csvData.length; i < lngth; i+=1) {
                csvData[i] = csvData[i].split(',');
                if (!!$('#' + csvData[i][0]).length){
                    iterationNum = '#' + csvData[i][0]
                    contentText = '<div class=\"percentageLabel\">' + csvData[i][1] + '</div>';
                    $(iterationNum).prepend(contentText); 
                }
            }   

        }();
    });

另一方面,这有效(当我发出警报时有效):

    $('#datainput').submit(function () {
        csvData = $("#csvData").val();
        csvData = csvData.split('\n');
        var iterationNum;
        var contentText;

        return function() {
            for (var i=0, lngth=csvData.length; i < lngth; i+=1) {
                csvData[i] = csvData[i].split(',');
                if (!!$('#' + csvData[i][0]).length){
                    iterationNum = '#' + csvData[i][0]
                    contentText = '<div class=\"percentageLabel\">' + csvData[i][1] + '</div>';
                    alert(iterationNum + contentText); 
                }
            }   

        }();
    }); 

我什至已经通过用#MyID 之类的实际ID 替换iterationNum 变量进行了测试,例如它在循环中不起作用。在循环外使用每个相同的表达式,前置工作:

                        contentText = '<div class=\"percentageLabel\"></div>';
                    $(MyID).prepend(contentText); 

但如果我在循环中使用该代码,我将一无所获。

你能发现我在这里做错了什么吗?

上面的第一个代码sn-p是我要工作的,其他的只是为了展示我还尝试了什么

【问题讨论】:

    标签: jquery arrays for-loop prepend


    【解决方案1】:

    好像在:

    iterationNum = '#' + csvData[i][0]; /* Don't forget your ;'s! */
    contentText = '<div class=\"percentageLabel\">' + csvData[i][1] + '</div>';
    $(iterationNum).prepend(contentText);
    

    $(iterationNum) 可能不是有效的选择器。将其更改为:

    iterationNum = '#' + csvData[i][0]; /* Don't forget your ;'s! */
    contentText = '<div class=\"percentageLabel\">' + csvData[i][1] + '</div>';
    alert(( $(iterationNum)[0] != null  ));
    

    并告诉我它警报是真是假。

    【讨论】:

    • 感谢您的回复!它提醒真实,但前置仍然没有添加任何东西
    • 查看一些 HTML 确实会有所帮助,但请将其更改为 alert( $(iterationNum).prepend(contentText).html() ) 并让我知道它是否会通过您预先添加的 HTML 发出警报。
    • 这很奇怪,它会用 prepend-ed html 发出警报,但是当我在控制台中查看实际的 html 时,prepend-ed html 不再存在
    • code `
    • 添加了上面的一些 html。另一个有趣的问题可能有助于找出问题所在,即使我将函数更改为 hide() 它而不是从 dom 中删除它,#fade div 也消失了
    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多