修改从jquery POST返回的html

时间:2010-08-06 20:08:02

标签: jquery

我正在尝试将一个字符串(已完成)替换为另一个字符串(C),该字符串位于从jquery POST返回的某些HTML的表格单元格中。 POST正常工作,我能够找到我的字符串,但将其设置为新字符串似乎没有做任何事情(没有错误,但原始字符串在我的页面中呈现)。以下是我的代码。有任何想法吗?注意注释掉的行是我最初尝试用来执行查找/替换的行,然后在我无法使用它时使用indexOf:

$.post(myURL, "",  function(data){
   $(data).find("#ReportOutput tr td").each(function(index) {
      //$(":contains('Completed')", this).css('backgroundColor', '#006600').css('color','white').html("C");
      // the above is not working, not sure why.  Below is workaround
      if ($(this).html().indexOf("Completed") > 0) {
        alert("found it. " + $(this).html());
        $(this).html("C");
      } 
   });
   $(data).find("#ReportOutput").appendTo('#divdetails');
});
divdetails只是我显示HTML的div。运行此时没有错误,并且警报发生时显示它找到了我的字符串,但是当html加载到div时它显示“已完成”字符串。

有谁可以指出我做错了什么?

3 个答案:

答案 0 :(得分:0)

如果您在替换之前将结果附加到DOM,我认为它将起作用:

$.post(myURL, "",  function(data){
   $(data).find("#ReportOutput").appendTo('#divdetails');   
   $("#ReportOutput tr td").each(function(index) {
      if ($(this).html().indexOf("Completed") > 0) {
        $(this).html("C");
      } 
   });
});

问题是你正在尝试替换不属于DOM的字符串,所以很可能它只能在副本上工作,从不编辑原始的data字符串。

答案 1 :(得分:0)

尝试替换它:

$(":contains('Completed')", this).css('backgroundColor', '#006600').css('color','white').html("C");

用这个:

$(this).filter(":contains('Completed')").css('backgroundColor', '#006600').css('color','white').html("C");

答案 2 :(得分:0)

另一个注意事项,如果字符串中的“Completed”排在第一位,那么if语句就不会发生。改为使用-1作为比较。

if ($(this).html().indexOf("Completed") != -1) {