2010-08-17 73 views
0

我想编辑一些从我保存的var中获得的HTML。像:使用返回的jQuery html()内容编辑HTML

var testhtml = $('.agenda-rename').html(); 
console.log($('input',testhtml).attr('name')); 

也试过

console.log($(testhtml).find('input').attr('name')); 

,但我得到undefined?我想它会像$ .ajax,$ .get,$ .post一样工作?我还能怎么做呢?

回答

1

当您拨打.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

+0

不会这样修改$('。agenda-rename')?我想保留它,而不是修改它。我试图创建内联模板基本上,我克隆,修改,然后显示在这种模式类型的界面。 – 2010-08-17 19:16:59

+0

@Oscar - 如果你不想修改它,你需要'.clone()'它。如果有附加的事件要保留,请调用'.clone(true)'。我会更新。 – user113716 2010-08-17 19:19:11

+0

@patrick dw:你说的对,我想,删除:) – Sarfraz 2010-08-17 19:22:14