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

11

我想在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()等类似方法吗?


你的意思是,你想替换所选标签文本的一部分吗? - amdorra
1
是的,基本上替换“str”变量中<title>标签内的文本。 - Gandalf
3个回答

28

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

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

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


我在</title>中错过了一个\来转义/。已更新。 - James G.
回到这个答案两年后进行修订。未来的stackoverflow用户应该更喜欢@Dimitar的方法,我的方法有一定的风险召唤克苏鲁,并且可能会因文件大小而遭受更大的速度损失。 - James G.

3
你也可以这样做:
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/


1
这是使用JavaScript的stristr(haystack, needle, bool)方法的绝佳时机。首先,您需要使用$('head')获取文档头部,然后使用.innerHTML获取内容。
为了回答问题,让我们将$('head').innerHTML存储在名为headvar中。首先,让我们使用stristr(head,'<title>',true)获取标题之前的所有内容,并使用stristr(head,'</title>')获取标题之后的内容,并将它们分别存储在名为beforeaftervar中。现在,最后一行很简单:
head.innerHTML = before + "<title>" + newTitle + after;

这看起来很有趣。能否提供一个 JSFiddle 来演示一下? - Gandalf
1
哦,糟糕!啊我现在感觉很愚蠢...抱歉,我刚才把自己和PHP搞混了...这个可以在PHP文件中运行,但不能在JS文件中。 - piticent123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接