写这篇目的,是想把在Web前端编程时遇到的一些“纳闷问题”记录下来;并将找到的解决方法及应对技巧总结归纳;以便以后查找使用。想来想去不知叫什么题目比较合适,就叫这个了。想以后遇到“纳闷问题都会补充进来吧”。也欢迎大家讨论,补充;把自己遇到的奇怪的前端问题贴出来。闲话不说了,这两天利用空闲之际想做个弹出层对话框。在这过程中遇到了几个问题,暂且先记下两个问题及解决方法。
问题一、想试图通过Javascript设置某元素style的float属性。我们使用Javascript操作css属性的写法是有一定的规律的:
1、对于没有中划线的css属性一般直接使用style.属性名即可。如:obj.style.margin、obj.style.width、obj.style.left、obj.style.position等。
2、对于含有中划线的css属性,将每个中划线去掉并将每个中划线后的第一个字符换成大写即可。如:obj.style.marginTop、obj.style.borderLeftWidth、obj.style.zIndex、obj.style.fontFamily等。
这个规律我想大多数的前端开发者也都熟知。但在css中有一个特殊的属性其js使用方法比较特殊。这个特殊的属性就是:float。我们不能直接使用obj.style.float来使用,这样操作是无效的。其正确的使用方法是为:IE:obj.style.styleFloat,其他浏览器:obj.style.cssFloat。
问题二、通过Javascript使动态添加到页面里的iframe的边框、边线去掉,不想看到。
为了达到目的,我们一般都会想到通过 iframeObj.frameBorder = "0"; [0:无边框、1:有边框],但事实这样做了,有些浏览器是没有了,我在Chrome 11.0.696.68看,达到了想要的效果(火狐中没测,应该正常);可是在IE 8中死活还是有的, 就是没效果;为什么呢?我又一次纳闷了。通过style.border = "0"; 还是不行,百度吧。一查,果然有同仁遇到跟我一样的问题。并且给出解决方法。在这里谢谢那位同仁。他的解决方法:var iframe = document.createElement('iframe'); iframe.setAttribute('frameborder', '0', 0);后面那个'0'表示是否区分大小写。他说原因:“DOM里面的属性都是大写的,也就是说上面这段代码,在IE里面最后会变成:< IFRAME frameBorder=0... 由于IE认大写的,所以”frameborder“ 它自然不认。”方法凑效,但原因不太明白。又搜出值得一读的关于译自W3C DOM Level 1中关于setAttribute方法的说明,内容不多,就贴出来了。
具体的方法参数如下:
object.setAttribute(sName, vValue [, iFlags])
参数:
sName:必填项. String类型,属性名
vValue:必填项. 为属性指定的变量,可以为string, number, 或者 Boolean类型
iFlags:选填. 下面指定的两种 Integer 类型的标志;0:覆盖同名、1:默认值,为属性添加指定值。
返回值:无。
备注:
如果指定的属性不存在,该方法讲为object添加新属性及值。
注意,当拼写属性名时. 如果 iFlags 设置成 1 并且 指定的sName 参数在该属性上没有相同名字时(包括大小写), object讲为之创建新属性。
如果object有两个或多个相同的属性名, 仅在值上不同时, iFlags设为 0, 该方法仅保存第一个被创建属性的值,其她的同名属性将被忽略。
使用该方法设置 CLASS 属性时, 请将sName 设为 "className",以符合Dynamic HTML (DHTML) 特性.(其实"className"仅适合在IE下使用,FF下要用"class")。
另外有个技巧:就是通过 “var iframe = document.createElement('iframe'); ”这样创建的元素,在VS2008中通过智能感知是点不出属性或者事件来的。如果你要想知道某个属性或者事件;你大可在页面拖个你要创建的那个类型的元素;然后通过var dialogSrcIframe = document.getElementById("dialogIframe"); dialogSrcIframe.src = url;就可以通过智能感知点出属性或者事件进行赋值等操作,然后直接替换对象名就可以了。
O(∩_∩)O~