innerHTML在Mozilla Firefox和Opera下执行的一个特例情况。

是在CSDN论坛看到的一个问题,平常我也没有注意,或者说没有这样用吧。看代码

var foo = function() {
var $ = function() { return document.getElementById(arguments[0]); }
$("d2").innerHTML = $("d1").innerHTML;
}
//]]>

改动两个文本框里的值,把这个容器的innerHTML赋值给d2

foo()

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

不是预期的结果吧?包括在Opera下执行的情况也是与Firefox下相同的,你可以尝试在Opera下运行就明白了。

如果能够得到我们预期的效果呢?我尝试着用__defineGetter__的方法在Mozilla下得到所有的innerHTML,在这里却给了我一些提示。比如:

function elementDetail (e) {
if (!e.attributes) return "";
var attrs = e.attributes; var str = "";
return str;
}
function foo() {
var a = document.getElementById("d1");
var str = "";
for (var i=0; i

改动两个文本框里的值,把这个容器的innerHTML赋值给d2

foo()

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

上面这些代码虽然达不到预期目的,但是却是要知道一定要得到attribute的值,因此我尝试着用下面这个方法来做。


var $ = function(id) { return document.getElementById(id); }
function foo() {
$("d2").innerHTML = $("d1").innerHTML;
}

改动两个文本框里的值,把这个容器的innerHTML赋值给d2

foo()

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

这个方法却成功了,也就可以说明,在Mozilla下的innerHTML通过遍历元素的所有节点的tagName还有attrubutes来得到其innerHTML的。因此我们第一个例中的innerHTML得不到改动后的value值。

与此同时,Opera下这一招也可以用。也证明在Opera下的innerHTML也是通过遍历元素的所有节点的tagName还有attrubutes来得到其innerHTML的。

难道w3c里的标准是这样的吗?还没有空来得及查w3c的资料,所以也说不上是Opera与Mozilla下的巧合,还是IE下面比较让开发人员舒服的设计。

(0)

相关推荐

  • innerHTML在Mozilla Firefox和Opera下执行的一个特例情况。

    是在CSDN论坛看到的一个问题,平常我也没有注意,或者说没有这样用吧.看代码 var foo = function() { var $ = function() { return document.getElementById(arguments[0]); } $("d2").innerHTML = $("d1").innerHTML; } //]]> 改动两个文本框里的值,把这个容器的innerHTML赋值给d2 foo() [Ctrl+A 全选 注:如需引

  • Ajax请求过程中下载文件在FireFox(火狐)浏览器下的兼容问题

    需求很简单,点击一个文件链接下载该文件,同时向后台发送请求.需求很常见,用户点击下载后通常要进行下载量的统计,统计的话可以利用 script标签 或者 img标签(图片ping) 的跨域能力,将它们的 src 属性指向统计地址,但是这次用了 ajax 进行统计,遂出现了这个问题. demo 代码如下: <a id="a" href="http://c758482.r82.cf2.rackcdn.com/Sublime Text 2.0.2 x64 Setup.exe&q

  • 无间断滚动的新闻文章列表,兼容IE、Firefox和Opera,符合W3C标准。可作Marquee

    <!--Quirks Mode--> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&

  • ul在Firefox和IE下的不同表现的解决方法

    最近做了个oblog的系统模板,其中涉及到了ul,所以就整理出了这篇文章+这张大图. ul是一个很常用的标签,但是因为它在Firefox和IE下的不同表现,让人觉得它是个很难以控制的标签. ul在Firefox下有个padding值, 却没有margin值:而在IE下正好相反,ul有个margin值, 却没有padding值.[下图中的第二第三例的对照可以看出] 在Firefox下,ul的list-style默认是处于内容的外边缘的.当然可以通过css可以将list-style置为内容的内边缘.

  • iframe的onload在Chrome/Opera中执行两次Bug的解决方法

    复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>iframe的onload在Chrome/Opera中执行两次</title> </head> <body> <script> var ifr = document.createElement('iframe'); ifr.onload =

  • php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法

    在php命令行下执行.php文件时,执行环境的工作目录(getcwd( ))是php命令程序(php.exe)所在目录,所以如果想在文件内使用相对路径时,要先切换当前的工作目录才行. 小测试程序: 复制代码 代码如下: <?php  $oldpath = getcwd();    // 原始工作目录 php.exe所在目录  $path = dirname(__FILE__);     chdir($path);           // 切换工作目录为当前文件所在目录  $fpath = &quo

  • CI框架在CLI下执行占用内存过大问题的解决方法

    很多程序员在使用codeigniter CLI下执行一个大批量数据导入的问题时,会一直出现内存过高的情况,下面对此分析器原因及解决办法. CI db会将所有的查询sql和和sql执行时间保存下来,对于类似百万级大数据量的导入问题来说,其执行的sql记录都会被保存在内容中,这就占用了大量的内容直至脚本结束. 解决办法:当你执行大数量的db操作时,记得设置: 复制代码 代码如下: $this->db->save_queries = FALSE;

  • linux下执行shell命令方法简介

    linux下执行shell命令有两种方法 在当前shell中执行shell命令 在当前shell中产生一个subshell,在subshell中执行shell命令 1.在当前shell中执行shell命令 主要就是在命令行中通过交互方式方式直接输入shell命令,命令行直接执行给出结果.比如这样: 2.在当前shell中产生一个subshell,在subshell中执行shell命令 比如我们把shell写成shell脚本的方式来运行,这个时候会先启动一个subshell来代替当前的shell,

  • cmake ios终端下执行提示错误 iOS version not found, tested: [5.0;5.1;6.0;6.1;7.0;8.3]的解决方案

    先给大家简单说下CMake. CMake是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程. CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install).测试安装的程序是否能正确执行(make test,或者ctest).生成当前平台的安装包(make package).生成源码

  • 在firefox和Chrome下关闭浏览器窗口无效的解决方法

    首先IE是可以通过window.close()来关闭浏览器窗口的,但是在firefox和Chrome下是无效的. 原因在于: Firefox下默认设置是无法通过脚本来关闭浏览器窗口的,为的是防止恶意脚本注入, 所以调整的方式就是在url地址栏中输入about:config, 然后在配置列表中找到 dom.allow_scripts_to_close_windows 点右键的选切换把上面的false修改为true即可. 默认是false chrome下的默认是不支持这种关闭方式的,但是也可以通过一

随机推荐