我有一个字符串,可能是也可能不是有效的HTML ,但它应该包含一个标题标签。
我想用新内容替换标题的内容。
示例1:
lorem yada yada <title>Foo</title> ipsum yada yada
应该变成:
lorem yada yada <title>Bar</title> ipsum yada yada
示例2:
lorem yada yada <title attributeName="value">Foo</title> ipsum yada yada
应该变成:
lorem yada yada <title attributeName="value">Bar</title> ipsum yada yada
我不想用正则表达式解析html - 只需替换标题标记...请不要发送给我here ...
编辑:
经过多次下来的投票和很多光顾的态度 -
我知道(正如原帖中所承认的)通常Regex不是处理HTML的方式。我对任何可以解决我的问题的解决方案持开放态度,但到目前为止,每个JQuery / DOM解决方案都无效。 “正确”是不够的。
答案 0 :(得分:4)
function replaceTitle( str, replacement ) {
var tmp = document.createElement("ihatechrome");
tmp.innerHTML = str;
tmp.getElementsByTagName("title")[0].innerHTML = replacement;
return tmp.innerHTML;
}
replaceTitle( "lorem yada yada <title>Foo</title> ipsum yada yada", "Bar" );
//"lorem yada yada <title>Bar</title> ipsum yada yada"
由于某些原因,如果img
标记为src
,Google Chrome会发出请求。没有任何意义,但这就是发生的事情。
编辑:
这似乎适用于chrome(不加载图片):
var doc = document.implementation.createHTMLDocument("");
doc.body.innerHTML = "<img src='/'>";
doc.body.innerHTML; //"<img src="/">"
答案 1 :(得分:3)
很难使用正则表达式可靠地执行此类操作(读取:“不适用于所有情况”),因此如果可能,使用某种正确的解析器是最好的。
那就是说,这是一个适用于你的例子的简单表达式:
var re = /(<title\b[^>]*>)[^<>]*(<\/title>)/i;
str = str.replace(re, "$1Bar$2");
有些事情没有处理,也无法正常使用:评论,引用,CDATA等。
答案 2 :(得分:0)
请上帝不要尝试用正则表达式解析html(我知道你说你没有解析它,但你是...)jQuery有一套非常好的基元来操纵不在的html DOM:
var htmlishString = "almost <title>HTML</title>";
var $fakeDiv = jQuery('<div />');
$fakeDiv.html(htmlishString).find('title').text('Bar');
var manipulatedString = $fakeDiv.html()