<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
function c()
{
var str=document.getElementById("d1").innerHTML;
alert(str);
}
</script>
</head><body>
<div id="d1">
<table>
<tr bgcolor="#00CC33">
<td>!!!!</td>
<td>456</td>
</tr>
<tr>
<td>456</td>
<td>456</td>
</tr>
</table>
</div>
<input type="button" onclick="c()" />
</body>
</html>代码很简单,在alert对话框中,bgcolor="#00CC33" 被显示为bgcolor=#00CC33,引号没有了,导致将innerHTML中的内容转为xml节点出错。如何在输出innerHTML时保留引号呢???
不知道你用什么做服务器端?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
function c()
{
var str="'"+document.getElementById("d1").innerHTML+"'";
alert(str);
}
</script>
</head><body>
<div id="d1">
<table>
<tr bgcolor="#00CC33">
<td>!!!!</td>
<td>456</td>
</tr>
<tr>
<td>456</td>
<td>456</td>
</tr>
</table>
</div>
<input type="button" onclick="c()" />
</body>
</html>
生成XML可以在客户端做,但是一般很少这么做,除非项目有什么特殊要求估计针对IE没办法解决,当你调用JS时,页面已经被IE给解析过了,属性中所有的""估计都被转化没了,除非你在重新对得到的那些没有引号的字符串进行分析。
我测试了一下通过创建range的方法,结果还是一样的。
function c()
{
var str=document.getElementById("d1");
var range = document.body.createTextRange();
range.moveToElementText(str);
alert(range.htmlText);
}
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
function c(){
var str=document.getElementById("d1").innerHTML;
var oReg=/(\s+\w+=)('|")?([#\w\u4e00-\u9fa5]+)('|")?/gi;
alert("原始串:\n"+str);
alert(str.match(oReg));
alert("替换后:\n"+str.replace(oReg,"$1\"$3\""));
}
</script>
</head><body>
<div id="d1">
<table>
<tr bgcolor="#00CC33" name="123" def="24">
<td>!!!!</td>
<td>456<input title='我是谁'/></td>
</tr>
<tr>
<td id=6>456</td>
<td id=123>456</td>
</tr>
</table>
</div>
<input type="button" onclick="c()" value="显示"/>
</body>
</html>
你声明var str =document.getElementById.innerHTML;
当然不用加引号了。
javascript 只是个弱脚本语言
属性应该写在style里面的
/(\s+\w+=)('|")?([#\w\u4e00-\u9fa5\-]+)('|")?/gi话说回来想用正则来做这个事情的话其实挺麻烦的,像这个正则其实不严谨。我没去试过,不过我觉得如果正文中出现了=的话就会被误操作。LZ不妨试一下诸如下面这样的HTML
<div>a=b</div>
就不用处理,但是align=center就要处理成align="center"。btw,ie真是烂啊
即使你加上引号了,也不能插入到xml中,因为innerHTML、outerHTML不仅仅是引号少了的问题,还有标签关闭问题。input元素后面的空格和斜线也会丢的。<div onclick="alert(innerHTML)">
<input type="button" value="显示" />
</div><input type="button" onclick="alert(outerHTML)" value="显示" />
24楼跟我7楼大概是一个意思吧,会有点麻烦,不过比较严谨。如果我做的话我想我还是会选择两者结合,自己遍历DOM,然后把得到的代码字符串放进CDATA里面。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
function c(){
var str=document.getElementById("d1").innerHTML;
var oReg2=/(\s+\w+=)('|")?(.*?)('|")?(?=\s+\w+=|\s*>|\s*\/>)/gi;
alert("原始串:\n"+str);
alert("替换后:\n"+str.replace(oReg2,"$1\"$3\""));
}
</script>
</head><body>
<div id="d1">
<table>
<tr bgcolor="#00CC33" name="123" def="id=6" style=" background-color:#cccccc;border:1px solid red;">
<td>!!!!</td>
<td>456<input title='我是谁'/></td>
</tr>
<tr>
<td id=6>456</td>
<td id=123>456</td>
</tr>
</table>
</div>
<input type="button" onclick="c()" value="显示"/>
</body>
</html>
不用自己再造一个轮子吧
这个HTML绝对是规范的。但不是XHTML,这个应用也不需要XHTML。
正则表达式太复杂了,看了很久进展都不是很大,还要下功夫啊