尽管 JavaScript 历史上使用冗长而令人生厌的代码块来标的特定浏览器的时期已经结束了,但是偶尔使用一些简单的代码块和对象检测来确保一些代码在用户机器上正常工作依然是必要的。
这篇文章中,我会略述一下 Internet Explorer 和 Firefox 在 JavaScript 语法上不同的 7 个方面。
1. CSS “float” 属性
获取给定对象的特定 CSS 属性的基本语法是 object.style 属性,而且有连字符的属性要用骆驼命名法来代替。例如,获取一个 ID 为 “header” 的 div 的 background-color 属性,我们要用如下语法:
document.getElementById("header").style.borderBottom= "1px solid #ccc";
但是由于 “float” 是 JavaScript 的保留词,我们就无法使用 object.style.float 来获取 “float” 属性了。一下是我们在两种浏览器中的使用的方法:
IE 语法:
document.getElementById("header").style.styleFloat = "left";
Firefox 语法:
document.getElementById("header").style.cssFloat = "left";
2. 元素的计算样式
通过使用上述的 object.style.property, JavaScript 可以很容易的获取和修改对象的设定 CSS 样式。但是这一语法的 ......
JavaScript 可算是世界上最流行的编程语言,它曾被 Web 开发设计师贴上噩梦的标签,虽然真正的噩梦其实是 DOM
API,这个被大量的开发与设计师随手拈来增强他们的 Web 前端的脚本语言,如今越来越被重视,虽则如此,JavaScript
仍然拥有很多让人费解的东西。
1. 它以 Java 命名,但并不是 Java
它最初叫 Mocha, 接着改名为 LiveScript,最后才确定命名为 JavaScript,根据历史记录,Java 的命名与
Netscape 和 Sun 之间的合作有关,作为交换条件,Netscape 在他们备受欢迎的浏览器中创建了 Java
运行时。值得一提的是,这个名字的出台几近一个玩笑,要知道,LiveScript 和 Java 在客户端脚本方面存在敌对关系。
不管怎么说,人们后来不得不一再澄清的一件事就是,JavaScript 和 Java 毫无关系。
2. Null 是个对象?
看看这段代码,它返回的是 object。
console.log(typeof null);//object
这实在令人费解,假如 null 表示空值,它怎么可以是对象?简单说,它是 JavaScript 最初版本的错误,这个错误甚至被微软的 JScript 直接借用。
3. NaN !== NaN
NaN,表示一个非数字的值,然而问题是,NaN不等于任何东西,甚至不等于它自己。
console.log(NaN === NaN);// ......
Javascript的调试,是开发Web应用尤其是AJAX应用很重要的一环,目前对Javascript进行调试的工具很多,我比较喜欢使用的是Firebug。Firebug是Joe Hewitt开发的一套与Firefox集成在一起的功能强大的web开发工具,可以实时编辑、调试和监测任何页面的CSS、HTML和JavaScript。
本文主要是为初学者介绍一下Firebug的基本功能与如何使用Firebug。由于本人水平与能力有限,在文章中的可能会有很多错误与遗漏,希望大家能谅解和指正!
1、 安装
Firebug是与Firefox集成的,所以我们首先要安装的事Firefox浏览器。安装好浏览器后,打开浏览器,选择菜单栏上的“工具”菜单,选择“附加软件”,在弹出窗口中点击右下角的“获取扩展”链接。在打开的页面的search输入框中输入“firebug”。等搜索结果出来后点击Firbug链接(图1-1红色圈住部分)进入Firebug的下载安装页面。
图1-1
在页面中点击Install Now(图1-2)按 ......
//复制所选表格的数据到剪贴板 作者:xx
function copyData(){
var content = "";
var tbl = getTbl();
//获取所选的所有数据
for(j = start_Row; j <= end_Row; j++)
{
for(i = start_Col; i <= end_Col; i++)
{
content += (tbl.rows[j].cells[i].childNodes[0].value);
if(i != end_Col) content += String.fromCharCode(9);
}
content += "\n";
}
try
{
//赋值到剪贴板
clipboardData.setData('text',content);
}catch(e)
{
alert('error:' + e);
}
}
......
javascript捕获窗口关闭事件有两种方法
1.用javascript重新定义 window.onbeforeunload() 事件
在javascript里定义一个函数即可
function window.onbeforeunload() { alert("关闭窗口")}
alert()事件将会在关闭窗口前执行,你也可以用户决定是否关闭窗口
function window.onbeforeunload() {
if (event.clientX>document.body.clientWidth && event.clientY<0 ||event.altKey)
window.event.returnValue="确定要退出本页吗?";
}
2.用onUnload方法
在body 标签里加入onUnload事件
body onUnload="myClose()"
然后在javascript里定义myClose()方法
但是onUnload方法是在关闭窗口之后执行,不是在关闭窗口之前执行,如果你想在关闭窗口之前做判断,请用第一种方法
......
这句话是:prototype中定义的是对象实例要访问的属性或方法的一个替补。
举例说明一下:
//1)定义了一个对象:
function A()
{
//给对象定义一个属性
this.f1="this is f1";
}
//2)我们可以这样使用对象:
var a = new A();
alert(a.f1)//弹出消息:this is f1
//3)我们可以扩展对象:
A.prototype.f1 = "this is new f1";
A.prototype.f2 = "this is f2";
//4)继续使用对象:
alert(a.f1)//弹出消息:this is f1【不是this is new f1】
alert(a.f2)//弹出消息:this is f2
说明:当我们使用对象时,首先从对象的定义中去找对应的属性,找不到再从prototype中去找。
如4)中调用a.f1,就能从对象本身定义中找到f1属性,不会再去prototype中去找f1属性,所以扩展的f1属性就用不上了
而a.f2,则因为在对象本身定义中没有找到f2属性,那么要继续从prototype中寻找有没有f2的定义,找到就返回它 ......