Каков рекомендуемый способ создания элемента HTML и привязки к нему слушателя с помощью jQuery? - PullRequest
1 голос
/ 15 июня 2010

На данный момент я достигаю этого используя что-то вроде этого:

var myElem = "<tr id='tr-1'><td>content</td></tr>";
$("#myTable").append(myElem);
$("#tr-1").click(function() {
  // blah blah
});

Традиционно, когда я не использовал jQuery, я делал что-то вроде этого:

var myElem = document.createElement(...);
var myTable = document.getElementById("myTable");
myTable.appendChild(myElem);
myElem.onclick = function() {
  // blah blah
}

Дело в том, что во втором подходе у меня уже есть ссылка на myElem, и мне не нужно сканировать DOM ($("#tr-1")), чтобы найти его, подобно подходу jQuery, и, следовательно, он должен быть очень быстрее, особенно на больших страницах. Нет ли лучшего способа решения этой задачи с помощью jQuery?

Ответы [ 3 ]

8 голосов
/ 15 июня 2010

Вы можете уменьшить / немного ускорить его следующим образом:

$("<tr id='tr-1'><td>content</td></tr>").click(function() {
 // blah blah
}).appendTo("#myTable");

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

Существует также версия $(html, props) начиная с версии 1.4, которая не вполне работает для вашего примера, но в некоторых ситуациях она даже более краткая, которую вы можете проверитьвне.

1 голос
/ 15 июня 2010

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

$(document).ready(function() {
  $("#tr-1").live("click", function() { 
    // blah blah 
  }); 
}
0 голосов
/ 15 июня 2010

Просто "приведите" myElem в объект jQuery?

$(myElem).click(function() { ... });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...