我真的很惊讶我之前没遇到过这个问题,但似乎在元素上调用jQueries .html()函数会忽略DOM中的更改,即它会返回原始源中的HTML.IE不会这样做.jQueries .html()只是在内部使用innerHTML属性.
这是否意味着发生?我使用的是Firefox 3.5.2.我在下面有一个示例,无论您将文本框值更改为什么,"container"元素的innerHTML只返回HTML标记中定义的值.该示例不使用jQuery只是为了使它更简单(使用jQuery的结果是相同的).
有没有人有一个解决方法,我可以在当前状态下获取容器的html,即包括对DOM的任何脚本更改?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script type="text/javascript">
<!--
function BodyLoad(){
document.getElementById("textbox").value = "initial UPDATE";
DisplayTextBoxValue();
}
function DisplayTextBoxValue(){
alert(document.getElementById("container").innerHTML);
return false;
}
//-->
</script>
</head>
<body onload="BodyLoad();">
<div id="container">
<input type="text" id="textbox" value="initial" />
</div>
<input type="button" id="button" value="Test me" onclick="return DisplayTextBoxValue();" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 这是我的html文件的一部分:
<form id="foo">
<select>
<option value="1" selected>1</option>
<option value="2">2</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
现在,当我使用以下javascript代码时,它会为我提供表单的确切内容:
alert(getElementById("foo").innerHTML);
Run Code Online (Sandbox Code Playgroud)
但是,在我使用表单更改选项后,上面的代码仍然返回表单内容的先前版本.
例如,假设我将选项从"1"切换为"2".在这种情况下,我希望上面的javascript代码返回表单的内容,选择选项"2"; 但无论我如何更改表单,它总是返回表单内容的原始版本.
这两者之间有什么区别,
b1.setAttribute('id','b1');
Run Code Online (Sandbox Code Playgroud)
和
b1.id='b1';
Run Code Online (Sandbox Code Playgroud)
是其中一个比另一个更有效?并且他们两个会完成相同的任务吗?他们在某些情况下会有所不同吗?