关于javascript的document.all函数的一点问题 var child = document.all[event.srcElement.getAttribute("child",false)];这句话再ie下是没有问题可以正确的得到结果但是如果再firefox下就出现错误,请各位说说这个为什么或者提个思路也好 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面是代码:var child = document.all[event.srcElement.getAttribute("child",false)]; alert("test"); if (null != child){ //alert(child.className); if(child.className == "expanded") { event.srcElement.src="images/plus.gif" child.className = "collapsed"; return; } if(child.className == "collapsed") { event.srcElement.src="images/minus.gif" child.className = "expanded"; return; }取出child属性,下面去比对,结果ie是可以继续下执行,但是firefox不可以向下面执行拉,页就是不会弹出对话框test谢谢关注 放弃firefox 我说了 算吗 其实我早打算放弃了 dom 什么呢 可以说明白一点吗 谢谢 楼主的方法太老套了,document.all..... 都已经是出土文物了。用document.getElementById()吧。如果在3、4年前,你完全可以说,放弃firefox,但现在你不能了。不仅是firefox,还有opera,safari....放弃“IE only”的东西,走标准化的路线,才是正道。 以前没有碰到过这样的问题,请问var child = document.all[event.srcElement.getAttribute("child",false)];这句话如果我用document.getElementById()来替换改怎么写呢 谢谢了 要兼容Firefox不是替换一两句代码就能解决的,Firefox是一个很好地支持标准的浏览器。所以,先要对DOM标准有一个全面的了解。同时,要兼顾像IE这样的非标准浏览器,又不得不对一些IE-only的东西有所了解。楼主的代码应该是写在一个事件处理函数中的,对于事件处理,IE和标准就有很大的不同。IE中存在一个全局对象event,标准不支持这个全局对象event,而是把它当作事件处理函数的参数来传入的。所以,你首先要修改事件处理函数。如下:function eventHandler(e) { if (isIE()) e = event;}function isIE() { // 在这里对浏览器是否是IE进行判断}这样,就把事件对象统一为函数的局部变量e。后面要访问事件对象就不再访问event了,而是访问e。接下来,标准中的事件对象是没有srcElement这个属性的,取而代之的是target属性。而不幸的是,IE不支持target属性。所以,这里又要做处理。在上面函数的基础上继续修改如下:function eventHandler(e) { if (isIE()) e = event; var targetObj; if (isIE()) targetObj = e.srcElement; else targetObj = e.target;}这样,又把事件的源统一在targetObj变量中。接下来的问题就容易解决了,因为IE也支持标准的document.getElementById(),所以,访问元素的方法已经统一了。这样,得到你的代码中的child,就可以写成:var child = document.getElementById(targetObj.getAttribute("child",false)); 求个swing的布局。。。。。。。。 练习注解时出现问题了,帮忙看看,代码不多 Java存储过程的调用 java文件操作的问题 这个尺寸出来怎么不对 通过java 调用linux 下命令 如何实现 变量赋值的问题,急急 搞不懂,为什么,程序一运行XX就已经画好了 一個構建JTable的問題 怎么卸载JBuilder4?为什么找不到可以卸载它的程序? java动态增加 老师布置了一道作业(英文的),不会做啊,高手们能指点一下吗?谢谢
var child = document.all[event.srcElement.getAttribute("child",false)];
alert("test");
if (null != child){
//alert(child.className);
if(child.className == "expanded")
{
event.srcElement.src="images/plus.gif"
child.className = "collapsed";
return;
}
if(child.className == "collapsed")
{
event.srcElement.src="images/minus.gif"
child.className = "expanded";
return;
}取出child属性,下面去比对,结果ie是可以继续下执行,但是firefox不可以向下面执行拉,页就是不会弹出对话框test谢谢关注
dom 什么呢
可以说明白一点吗 谢谢
用document.getElementById()吧。如果在3、4年前,你完全可以说,放弃firefox,但现在你不能了。
不仅是firefox,还有opera,safari....
放弃“IE only”的东西,走标准化的路线,才是正道。
var child = document.all[event.srcElement.getAttribute("child",false)];
这句话如果我用document.getElementById()来替换改怎么写呢 谢谢了
if (isIE()) e = event;
}function isIE() {
// 在这里对浏览器是否是IE进行判断
}
这样,就把事件对象统一为函数的局部变量e。后面要访问事件对象就不再访问event了,而是访问e。接下来,标准中的事件对象是没有srcElement这个属性的,取而代之的是target属性。而不幸的是,IE不支持target属性。所以,这里又要做处理。在上面函数的基础上继续修改如下:function eventHandler(e) {
if (isIE()) e = event;
var targetObj;
if (isIE()) targetObj = e.srcElement;
else targetObj = e.target;
}这样,又把事件的源统一在targetObj变量中。
接下来的问题就容易解决了,因为IE也支持标准的document.getElementById(),所以,访问元素的方法已经统一了。这样,得到你的代码中的child,就可以写成:var child = document.getElementById(targetObj.getAttribute("child",false));