jQuery prepend () внутри цикла for после получения массива из текстовой области - PullRequest
1 голос
/ 20 марта 2011

Привет и спасибо за чтение.

Я пытаюсь разрешить пользователям вставлять текст в поле текстовой области, а затем работать с тем, что они вставили.

Область приложения ограничена, но пользователи будут вставлять содержимое файла CSV, в котором первый столбец совпадает с установленными мной идентификаторами Div.

По какой-то причине, когда я предупреждаю в этом цикле, он предупреждает отлично. Проблема в том, что когда я пытаюсь 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); 
                }
            }   

        }();
    }); 

Я даже протестировал, заменив переменную iterationNum фактическим идентификатором, например #MyID, и он не работает в цикле. Используя каждое то же выражение вне цикла, препенд работает:

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

Но если я использую этот код в цикле, я ничего не получаю.

Можете ли вы определить, что я делаю здесь не так?

Первый фрагмент кода выше - это тот, который я хочу работать, остальные просто показывают, что еще я пробовал

1 Ответ

1 голос
/ 20 марта 2011

Вроде как:

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  ));

И скажите мне, предупреждает ли он об истинном или ложном.

...