Reputation: 930
I want to find and replace text in a HTML document between, say inside the <title> tags. For example,
var str = "<html><head><title>Just a title</title></head><body>Do nothing</body></html>";
var newTitle = "Updated title information";
I tried using parseXML() in jQuery (example below), but it is not working:
var doc= $($.parseXML(str));
doc.find('title').text(newTitle);
str=doc.text();
Is there a different way to find and replace text inside HTML tags? Regex or may be using replaceWith() or something similar?
Upvotes: 11
Views: 21570
Reputation: 15158
You can also do something like this:
var doc = $($.parseXML(str));
doc.find('title').text(newTitle);
// get your new data back to a string
str = (new XMLSerializer()).serializeToString(doc[0]);
Here is a fiddle: http://jsfiddle.net/Z89dL/1/
Upvotes: 3
Reputation: 2904
I did something similar in a question earlier today using regexes:
str = str.replace(/<title>[\s\S]*?<\/title>/, '<title>' + newTitle + '<\/title>');
That should find and replace it. [\s\S]*?
means [any character including space and line breaks]any number of times, and the ? makes the asterisk "not greedy," so it will stop (more quickly) when it finds </title>
.
Upvotes: 28
Reputation: 323
This would be a wonderful time to use Javascript's stristr(haystack, needle, bool)
method. First, you need to get the head of the document using $('head')
, then get the contents using .innerHTML
.
For the sake of the answer, let's store $('head').innerHTML
in a var
called head
. First, let's get everything before the title with stristr(head, '<title>', true)
, and what's after the title with stristr(head, '</title>')
and store them in var
s called before
and after
, respectively. Now, the final line is simple:
head.innerHTML = before + "<title>" + newTitle + after;
Upvotes: 1