如何使用jQuery或JavaScript替换两个XML标记之间的文本?

时间:2013-12-24 20:02:15

标签: javascript jquery regex string

我有一个XML标记/代码,如下所示。我想使用JavaScript或jQuery替换其中一个标记内的文本(在本例中为< begin> ...< / begin>)。

<part>
 <begin>A new beginning</begin>
   <framework>Stuff here...</framework>
</part>  

源位于textarea内。我有以下代码,但显然没有做我想要的。

code=$("xml-code").val();       // content of XML source
newBegin = "The same old beginning";    // new text inside <begin> tags
newBegin = "<begin>"+newBegin +"</begin>";   

code=code.replace("<begin>",newBegin);   // replace content

这只是附加到begin标记内的现有文本。我有一种感觉,这只能使用Regex,但不幸的是我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

你可以使用parseXML() jQuery函数,然后用.find()/。text()替换相应的节点

var s = "<part><begin>A new beginning</begin><framework>Stuff here...</framework></part>";
var xmlDoc = $($.parseXML(s));
xmlDoc.find('begin').text('New beginning');
alert(xmlDoc.text());

http://jsfiddle.net/x3aJc/

答案 1 :(得分:0)

与其他答案类似,使用$.parseXML()功能,您可以这样做:

var xml = $.parseXML($("xml-code").val());
xml.find('begin').text('The same old beginning');

请注意,无需替换整个节点,只需更改其文本即可。此外,如果有多个<begin>节点也需要该文本,则此方法有效。

答案 2 :(得分:0)

您可以使用正则表达式,但最好不要这样做。使用DOM解析器。

var code = $('xml-code').html();            // content of XML source
var newBegin = "The same old beginning";    // new text inside <begin> tags

var regexp = new Regexp('(<part>)[^~]*(<\/part>)', i);
code = code.replace(regexp, '$1' + newBegin + '$2');