JQuery добавить индивидуальный идентификатор - PullRequest
0 голосов
/ 25 августа 2011

Я пытаюсь дать p элементам разные идентификаторы, а затем присваиваю каждому p контент. Вот некоторые из моих предыдущих работ:

while(i<=10){
    $.ajax({    
        url: "tabelle.html",
        success: function(data) {
            $('div').append("<p id='+i+'></p>");
            $('#"+i+"').html(data);
        },
        error: function(){
            alert('nein!');
        },  
    });     
    i++;
}
</script>
</head>
<body>
<div>
<p> </p>
</div>

Но это не работает, кто-нибудь может помочь? Вы сказали, что я должен быть более конкретным, что не работает. Проблема в том, что он ничего не делает ...

Ответы [ 7 ]

1 голос
/ 25 августа 2011

Функция ошибки в качестве последнего параметра в вашем вызове $ .ajax () сопровождается запятой, но после этого никакие другие параметры не вставляются.Вы можете удалить эту запятую.

Кроме того, насколько я понимаю, вы назначаете числовые идентификаторы.По определению это не разрешено.Идентификаторы должны начинаться с буквы.

var id = 0;
for ( var x = 0; x < 10; x++ ){
    $.ajax({    
        url: "tabelle.html",
        success: function(data) {
            $('<p>').attr('id','p'+id).html(data).appendTo($('div'));
            id++;
        },
        error: function(){
            alert('nein!');
        } 
    });
}

Я добавил «p» в начале каждого идентификатора.

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

1 голос
/ 25 августа 2011

Помимо проблемы конкатенации, проблема в том, что каждый обратный вызов имеет ссылку на один и тот же i, и в момент выполнения обратных вызовов цикл завершается.Все элементы будут иметь идентификатор 11.

. Вы можете подумать, что каждая итерация ожидает возврата вызова Ajax, но это не так.Ajax - это асинхронный , «окружающий» код не ожидает завершения вызовов Ajax (вот почему вы должны передать обратный вызов).

Другая проблема заключается в том, что JavaScript не имеет блокаобъем.Вы можете создать новую область и "захватить" значение i, вызывающего функцию.Вот пример с немедленной (или самодействующей ) функцией:

while(i<=10) {
    (function(index) {
        $.ajax({    
            url: "tabelle.html",
            success: function(data) {
                $('<p />', {id: 'prefix' + index, html: data})
                 .appendTo('#divId');
            },
            error: function(){
                alert('nein!');
            }
        });
    }(i++));
}

Другим решением было бы поместить вызов Ajax в именованную функцию ивызовите его из цикла (передавая текущий индекс):

while(i<=10) {
    makeAjaxCall(i++);
}

В вашем особом случае вам даже не нужно делать Ajax-запрос в цикле.Вы не отправляете какие-либо параметры на сервер.В этом случае вы можете выполнить итерацию в обратном вызове успеха:

$.ajax({    
    url: "tabelle.html",
    success: function(data) {
        var $p = $("<p />", {html: data}),
            $div = $('#divId');
            i = 1; //?
        while(i<=10) {
            $div.append($p.clone().attr('id', 'prefix' + i);
        }
    },
    error: function(){
        alert('nein!');
    }
});

Хорошо сделать как можно меньше запросов.Другой вариант - отправить структурированные данные в качестве ответа (например, JSON [Wikipedia] ), проанализировать и обработать их соответствующим образом.

Учтите:

  • В HTML4 идентификаторы не могут начинаться с цифр.Хотя он, скорее всего, будет работать во всех браузерах, лучше использовать префикс ID с символами (хотя он действителен в HTML5).

  • $('div') выберет все divна странице.Это не кажется проблемой в вашем конкретном примере, но если ваша структура становится более сложной, убедитесь, что вы добавляете новый элемент только к одному элементу (иначе у вас будет несколько элементов с одинаковым идентификатором.

  • Завершающие запятые в литералах объекта вызывают проблемы в IE.

  • У вас могут возникнуть проблемы с одновременным выполнением стольких запросов. Вы мог делать запросы один за другим, используя Deferred объектов jQuery .

1 голос
/ 25 августа 2011

Вы используете одинарные и двойные кавычки рядом друг с другом, а не вместе.

$('div').append("<p id='+i+'></p>");

должно быть

$('div').append("<p id="+i+"></p>");

и

$('#"+i+"').html(data);

должно быть

$('#'+i).html(data);

Кроме того, идентификатор элемента не может начинаться с цифры, поэтому добавьте текст перед:

$('#prefix_'+i).html(data);
0 голосов
/ 25 августа 2011

Ваша конкатенация строк выглядит неправильно. Начните с одинарных кавычек и используйте двойные для конкатата.

Используйте

"<p id="+ i +"></p>"

ИЛИ даже лучше

'<p id="'+ i +'"></p>'
0 голосов
/ 25 августа 2011

Есть несколько проблем с вашим кодом.

Сначала убедитесь, что HTML верен (вы дали нам только его фрагмент). Во-вторых, убедитесь, что jQuery загружен при вызове скрипта.

Но главная проблема в неверных кавычках:

$('div').append("<p id='+i+'></p>");

следует заменить на

$('div').append('<p id="' + i + '"></p>');

и

$('#"+i+"').html(data);

следует заменить на

$('#' + i).html(data);

Дайте нам знать, если это помогло - могут быть дополнительные проблемы.

EDIT:

Как уже упоминалось, ваш id неверен (не должен начинаться с цифры, возможно, добавьте префикс " p- " перед i), также запятая не очень хорошая - вы должны убери это. Кроме того, вы можете использовать for вместо while и приращения; плюс вы не должны использовать i в качестве глобальной переменной. Полученный код JS будет выглядеть так:

for(var i=1; i<=10; i++){
    $.ajax({    
        url: 'tabelle.html',
        success: function(data) {
            $('div').append('<p id="p-' + i + '"></p>');
            $('#p-' + i).html(data);
        },
        error: function(){
            alert('nein!');
        } 
    });
}
0 голосов
/ 25 августа 2011

Перво-наперво, вы перепутали свои цитаты в этой строке:

$('div').append("<p id='+i+'></p>");

Это должно быть

$('div').append("<p id='" +i+ "'></p>");

Но, остановитесь!id не может начинаться с цифры, поэтому измените это на

$('div').append("<p id='something" +i+ "'></p>");

, где «что-то» должно начинаться с символа или подчеркивания.

Затем измените другую строку на

$('#something' +i).html(data);
0 голосов
/ 25 августа 2011
while(i<=10){
    $.ajax({    
        url: "tabelle.html",
        success: function(data) {
            $('div').append("<p id='element" + i + "'></p>");
            $('#'+i).html(data);
        },
        error: function(){
            alert('nein!');
        } 
    });     
    i++;
}

РЕДАКТИРОВАТЬ: Стоит также упомянуть ... не делать ajax-запросов в цикле. Сделайте один запрос, который вернет все необходимые данные, а затем зациклите результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...