如何使用jQuery在HTML或XML文档中的两个标签之间查找和替换文本?

时间:2013-12-26 04:20:37

标签: javascript jquery html regex

我想找到并替换HTML文档中的文本,例如在< title>内部。标签。例如,

var str = "<html><head><title>Just a title</title></head><body>Do nothing</body></html>";
var newTitle = "Updated title information";

我尝试在jQuery中使用parseXML()(下面的示例),但它不起作用:

var doc= $($.parseXML(str));
doc.find('title').text(newTitle);
str=doc.text();

有没有不同的方法来查找和替换HTML标记内的文本?正则表达式或可能正在使用replaceWith()或类似的东西?

3 个答案:

答案 0 :(得分:17)

我今天早些时候使用正则表达式在一个问题中做了类似的事情:

str = str.replace(/<title>[\s\S]*?<\/title>/, '<title>' + newTitle + '<\/title>');

应该找到并替换它。 [\s\S]*?表示[任何字符包括空格和换行符]任意次,并且?使星号“不贪婪”,因此当它找到</title>时会停止(更快)。

答案 1 :(得分:2)

您也可以这样做:

var doc = $($.parseXML(str));
doc.find('title').text(newTitle);

// get your new data back to a string 
str = (new XMLSerializer()).serializeToString(doc[0]);

这是一个小提琴:http://jsfiddle.net/Z89dL/1/

答案 2 :(得分:1)

这是使用Javascript的stristr(haystack, needle, bool)方法的绝佳时机。首先,您需要使用$('head')获取文档的头部,然后使用.innerHTML获取内容。

为了回答,我们将$('head').innerHTML存储在名为var的{​​{1}}中。首先,让我们使用head获取标题之前的所有内容,并使用stristr(head, '<title>', true)获取标题之后的内容,并将它们分别存储在名为stristr(head, '</title>')var的{​​{1}}中。现在,最后一行很简单:

before