将HTML字符串转换为Jquery,操作并转换回字符串

时间:2013-11-01 00:41:59

标签: javascript jquery

我遇到了很多问题,基本上我有一个从服务器(Ajax)收到的字符串。该字符串可能有也可能没有锚链接。它也可能有许多。 我需要取这个字符串,找到所有的锚链接,更改href,然后在屏幕上输出结果。为此,我有以下代码,我认为它将起作用。这和我到目前为止一样接近:

  result.origText = "some random text <a href=\"http://www.abc.com\">random link</a>"
经过大量的反复试验后,我终于想出了以下代码:

  var origText = $(result.origText);                            
  origText.filter("a").each(function () {
      var href = $(this).attr("href");
      $(this).attr("href", href + '#ref=' + Num); //Num is currently = 12345
  });
  finalText = origText[0].outerHTML;

finalText然后包含:

  <a href="http://www.dermapoise.com#ref=12345">random link</a>

我丢失了所有未包含在任何标签中的其他文字。我该如何存档?

更新:可以使用以下输入字符串:

  "some random text <a href=\"http://www.abc.com\">random link</a> some more text <a href=\"http://www.abc2.com\">random link2</a> Even more text <a href=\"http://www.abc.com\">random link3 with the same href</a>" 

1 个答案:

答案 0 :(得分:2)

这是因为当jQuery尝试解析给定的文本时,它会尝试将其解析为选择器,而不是html内容 - 它会抛出错误Uncaught Error: Syntax error, unrecognized expression: some random text <a href="http://www.abc.com">random link</a>

因为在顶级你有文本节点,所以最好在它周围包装另一个容器,然后根据需要修改内容,然后获取容器的内部内容

var origText = $('<div />').html(result.origText);
origText.find("a").attr('href', function (idx, href) {
    return href + '#ref=' + Num
});
finalText = origText.html();