我想找到并替换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()或类似的东西?
答案 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