Отладка метода Jquery append() и порядка следования цепочек

#jquery

#jquery

Вопрос:

Я пытаюсь вставить новую строку в таблицу с помощью Jquery. Может ли кто-нибудь прокомментировать эти два метода:

  1. Это работает правильно:

     $('<tr>').append(row).appendTo(table);
      
  2. Это не работает, но не ясно почему?

     $(row).appendTo($('<tr>')).appendTo(table);
      

Ответ №1:

 $(row).appendTo($('<tr>').appendTo(table)); 
  

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

Комментарии:

1. Я не уверен. Я довольно новичок в JS и Jquery.. Тем не менее, вам следует проверить сообщение Джона ниже.

Ответ №2:

 $(row).appendTo($('<tr>'))
  

Это добавляет строку к вновь созданному <tr> . Это возвращает ссылку jQuery на row НЕ на вновь созданный <tr>

                           .appendTo(table);
  

Добавляет row в table , таким образом удаляя его из вновь созданного <tr> .

Попробуйте это вместо этого. Он получает ссылки прямо.

 $('<tr>').append(row).appendTo(table);
  

Комментарии:

1. Ваш последний блок кода был № 1 в вопросе, но для меня это не очень элегантно.

2. Как я уже говорил выше: вы добавляете строку в динамический tr, а затем сразу же добавляете ее (строку) в таблицу. : )

3. @Casey так оно и есть 🙂 я не возвращался к вашему вопросу после написания этой части.

4. @John неверно. Я добавляю row к динамической строке, а затем добавляю tr в таблицу. append не изменяет цепочку. Он возвращает tr .

5. @Casey несмотря на то, что он элегантный, у меня с этим нет проблем. я могу это нормально прочитать. я полагаю, это сводится к вопросу личного стиля.

Ответ №3:

Ваша область действия отключена. appendTo не изменит область действия цепочки. Вы добавляете строку в динамический tr, а затем сразу добавляете ее в таблицу.


Решение Snowblind будет работать, это будет работать: $ (table).append($(row).wrap('<tr></tr>'));

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

Комментарии:

1. я не смог проработать пример переноса. Я попробовал: table.append($(‘<td>1</td>’).wrap(‘<tr></tr>’));

Ответ №4:

В вашем втором примере…

 $(row).appendTo($('<tr>')).appendTo(table);
  

Набор, который вы вызываете appendTo() во второй раз, не соответствует тому, что вы думаете. Это будет row .

Этот jsFiddle должен сделать это понятнее.