Когда вы звоните .html()
, вы получаете только контент, а не .agenda-rename
. Так что если input
является прямым потомком .agenda-rename
, то .find()
не сможет его найти.
Наверное, лучше просто обойтись без вызова .html()
:
var testhtml = $('.agenda-rename').clone(); // or .clone(true)
console.log($('input',testhtml).attr('name'));
Теперь у вас есть .agenda-rename
элемент (ов), и вы сможете искать элементы, вложенные в него / них.
РЕДАКТИРОВАТЬ: На основе комментариев OP не хочет изменять оригинал. Таким образом, .clone()
может использоваться. Ответ выше был отредактирован для отражения изменений.
Если прикреплены события, которые следует сохранить, то вы используете .clone(true)
.
РЕДАКТИРОВАТЬ: Причина, по которой $('input',testhtml)
и $(testhtml).find('input')
дают одинаковый результат, в том, что они на самом деле одно и то же.
jQuery преобразует первую версию во вторую закулисную. Таким образом, технически немного эффективнее использовать второе, чем первое.
Вот код, в котором jQuery выполняет переключение (после запуска множества других тестов, чтобы определить, что именно было пройдено).
http://github.com/jquery/jquery/blob/master/src/core.js#L150