В этом цикле for, как перехватить оба сообщения, а не только первое? (JQuery)

0

Поэтому я пытаюсь выполнить следующее

  • Прокрутите все td с помощью класса manager-msg
  • Сохраните текст из каждого из них в переменную/массив
  • Сделайте разделение и создайте новый текст
  • Заменить текст каждого менеджера-msg td

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

Однако я сохраняю первое сообщение дважды, получаю текст во втором td.

Изображение 174551

Изображение 174551

HTML

<table cellpadding="10" border="1">
<tr>
    <td>Name</td>
    <td>Wants to Meet</td>
    <td >Message</td>
</tr>
<tr>
    <td>Ann</td>
    <td>Cal</td>
    <td class="manager-msg">Hi I'd love to meet Cal</td>
</tr>
<tr>
    <td>Bob</td>
    <td>Joe</td>
    <td class="manager-msg">Hi I'd like to meet Joe</td>
</tr>
</table>

JQuery

var home_inbox_br_fix = function() {
    var num_manager_msg = $('.manager-msg').length;
    var test = [];

    for (var i = 0, num_manager_msg; i < num_manager_msg; i++) {
        test[i] = $('.manager-msg').html();
        alert('Message '+(i+1));
        alert(test);
  console.log(test);
    }
};

/*
var home_inbox_br_fix = function() {
    var test = [];
    $(".manager-msg").each(function(i){
        test.push($('.manager-msg').html());
        alert(this.id + " is the " + i + "th div with this class");
    });
    console.log(test);
};
*/

home_inbox_br_fix();

Получил код туннеля в настоящий момент X (как бы вы, парни, справились с этим?

  • 2
    Какой смысл, просто предупредить два имени -> jsfiddle.net/m6P3B
Теги:
for-loop
loops
each

4 ответа

2
Лучший ответ

Попробуйте вместо этого использовать jQuery .each()

var home_inbox_br_fix = function() {
    var test = [];
    $('.manager-msg').each(function(i){
        test[i] = this.innerHTML;
  alert(test[i]);
    });
};

Демо здесь

  • 0
    Ах, спасибо, у меня мертвый мозг, забыл об this
  • 1
    @ Леон, иногда мне тоже приятно, когда другие люди смотрят на мой код :)
Показать ещё 1 комментарий
2

Я бы использовал .map() чтобы получить значения.

var messages = $('.manager-msg').map(function() {
    return $(this).text();
}).get();

http://jsfiddle.net/YfpZL/

  • 0
    Спасибо! Я забыл this мне = 'нужно больше спать'
1

вам просто нужно правильное индексирование

var home_inbox_br_fix = function() {
    var num_manager_msg = $('.manager-msg').length;
    var test = [];

    for (var i = 0, num_manager_msg; i < num_manager_msg; i++) {
        test[i] = ($($('.manager-msg')[i]).html());
        alert('Message '+(i+1));
        alert(test);
        console.log(test);
    }
};
1

Вы всегда получаете один и тот же текст, потому что вы не используете текущий индекс при получении HTML. Он будет работать, если вы так зацикливаетесь (хотя есть другие способы, как показано в других ответах):

for (var i = 0, num_manager_msg; i < num_manager_msg; i++) {
    test[i] = $('.manager-msg').eq(i).html();
    // You were missing this! -----^
    alert('Message '+(i+1));
    alert(test[i]);
    console.log(test[i]);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню