替换所有使用双引号的单引号的html属性定义

时间:2012-11-14 04:10:47

标签: javascript jquery dom

我有一个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页面。

谢谢!

2 个答案:

答案 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:

http://jsfiddle.net/QdUR5/1/

<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。

我认为这比使用正则表达式更简单,虽然这是一个很棒的正则表达式迈克:)