jQuery .filter()不起作用

时间:2013-07-01 08:40:45

标签: jquery filter

我有一个包含id为“frmCmt”的表单的html页面,我想在其他文档中显示此表单,我使用jQuery .filter()但现在正在工作并显示整页。

我的jQuery代码:

function showCommentForm(postID){
$.ajax({
type: "GET",
cache: true, 
url: "http://mysite.com/post/comment/"+postID,
success:(function(msg){
$("#commentContainer"+postID).html(msg).filter("#frmCmt") ;
return false;
})});

请帮忙。

2 个答案:

答案 0 :(得分:1)

您当前的代码不会有三个原因:

  1. 您正在将msg中的所有内容作为HTML注入到您的元素中; .filter仅在发生后才运行,因此无法正常工作。
  2. .filter过滤来自jQuery对象的匹配集合中的项目,但是tou没有使用.filter的结果来做任何事情,所以再次它不起作用。
  3. 在这种情况下匹配的集合不包含任何#frmCmt元素,因此.filter将评估为“空”jQuery实例;即使以某种方式使用它,结果也不会是你所期望的。
  4. 将代码更改为

    var html = $(msg).find("#frmCmt").html();
    $("#commentContainer"+postID).html(html);
    

    此代码从msg的内容创建一个jQuery对象,并在将.find插入DOM之前将所需元素归零。

答案 1 :(得分:0)

您可能需要在此处使用find()而不是.filter(),仅当给定元素是msg

中的顶级元素时,过滤才有效

解决问题的一种方法可能是

$(msg).find('#frmCmt').appendTo($("#commentContainer"+postID).empty())

或者您可以使用.load()函数

$("#commentContainer"+postID).load("http://mysite.com/post/comment/"+postID + ' #frmCmt')