我有一个html字符串,我想用双引号替换用单引号设置的html属性的任何实例。
例如,我想替换
<script src='foo.js'></script>
带
<script src="foo.js"></script>
但是,我想这样做而不会影响可能在javascript语句中或html中的文本中的任何单引号。
例如
<script> var foo = '67'; </script>
应该不受影响
<div id='foo'> 'hi' </div>
应该成为
<div id="foo"> 'hi' </div>
有没有简单的方法可以做到这一点?
对于给定的元素用jquery选择它然后读取它的outerHTML这样做但我想一次性完成整个html页面。
谢谢!
答案 0 :(得分:1)
试试这个:
var str = "<br style = 'width:100px'/> test link<a href=\"http://www\"></a>";
var regex = /<\w+\s*(\w+\s*=\s*(['][^']*['])|(["][^"]*["]))*\s*[\/]?>/g;
var rstr = str.replace(regex, function($0,$1,$2){
return $0.replace($2, $2.replace(/'/g, '"'));
});
console.log('replaced string = ' + rstr);
您可以将其重新整理以严格匹配您的情况。
答案 1 :(得分:1)
回答我自己的问题,因为我认为对此最简单的解决方案是这个小提琴中显示的内容,不需要jquery或regexps:
<html id="foo"></html>
var htmlString =
'<head>' +
'<script type="text/javascript" src=\'main.js\'></scr' + 'ipt>' +
'</head>' +
'<body onload=\'onLoad()\'>' +
'</body>' ;
document.getElementById('foo').innerHTML = htmlString;
console.log(document.getElementById('foo').outerHTML);
基本上你只需要将html元素的内部html设置为不带html标签的html字符串,然后输出html元素外部html。
我认为这比使用正则表达式更简单,虽然这是一个很棒的正则表达式迈克:)