— Designsor

Archive
Tag "前端开发"

个人最近项目的一点小分享,做成了PPT,也发到自己的BLOG上来对外下~XD

Read More

啊,我不是专业程序员,我英文烂到不行。嗯……基础差劲,经验一般~嗯,群里给我结论……

个人我也很同意[使劲点头],但是我绝对自信的是自己的歪门邪道……也就是野路子。嗯,遇到问题会用自己知识范围内的所知全力解决……唔。也就是所谓的实战派,实用派,最意外忍者和野路子了。

好了,扯淡结束,下个话题。关于javascript对象字面量,到底是什么东西?看下下面的例子代码:

var a={
‘m’:'b’,
‘a’:'c’,
‘c’:’1′
};

这里的a,被定义了成了一个对象,他有3个属性m,a,c值则就是b,c,1了。这就是javascript中的对象,键对值的。然后我们如果要访问他们,如果知道属性名则这样访问a['m']//返回b;而我们当然开始不知道对象里有什么。就需要使用for in循环了比如for(var k in a){a[k];//以此返回b,c,1;}k则是遍历的键名了。

唔……昨天有个傻呸在群里说:他想不用循环又想得到一个对象字面量的第一个键名和值……

好吧,我们想了好久,最终我这个野路子想出方法啦……嗯,其实我也是现找的一个javascript对象属性外加一个野想法……

嗯,a这个对象我们不知道内部有什么,我们又不可以用循环,最开始的思路大家都差不多,嗯,匹配?或者……啊,对,总之要把他这个对象转换成可以操作的一个什么东西,toString();?不行,caller?也不行……额,我找了挺久发现了这么一个属性……toSource() ;方法……嗯,返回对象内部的源码,哇嘞NB,因为我的手册里没有这个属性- -||所以之前一直不知道有这么个方法。

既然这样实现起来就容易了:

var a={
‘m’:'b’,
‘a’:'c’,
‘c’:’1′
};
function objfirstparam(obj){
var str=obj.toSource();
var re = /(?!{)[w](?=:)/;
return str.match(re).toString();
}
alert(objfirstparam(a));
alert(a[objfirstparam(a)]);

嗯,先读出对象里的源码,我判断了,就是str类型,那么OK了,根据读出来的str写个正则匹配下,不用循环匹配字符串特定的第一个键名还是比较容易的。嗯,要求符合,问题解决……我是野路子……

这只是个思路,基本和实际应用关系不大,可谁知道呢,也许以后没准还能真可以用上,特此记录一下(PS:最近迷上了正则表达式,哇嘞真的是jser的一把瑞士军刀,NB,建议大家多多练习使用,增强火力吧。)

Read More

最近开始恶补基础知识,弥补自己的基础薄弱的问题。

haslayout是什么?

“Layout” 是 IE 的一个私有属性,并不是W3C标准。它决定了一个对象(就是一个标签div、li等)在内容中如何显示、与周围对象的位置关系、以及怎样响应程序或用户产生的事件。

这个属性可以被一些css强制激活。一些HTML标签默认具有haslayout。

下面这些标签默认拥有haslayout属性:

  • <html><body>
  • <table><tr><th><td>
  • <img>
  • <hr>
  • <input><button><select><textarea><fieldset><legend>
  • <iframe><embed><object><applet>
  • <marquee>

怎样激活layout?

position: absolute
设置绝对定位可能会引发新的问题。
float: left|right
IE下的浮动也会产生一些莫名其妙的问题。
display: inline-block
当一个内联元素需要haslayout属性时就需要用它,但是IE本身不支持inline-block的,只是表现得像标准里说的inline-block。
width: 除’auto’外的任意值
优先考虑使用该属性。
height: 除’auto’外的任意值
对 IE6 及更早版本来说很常用,该方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。但是要注意,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。
zoom: 除’normal’外的任意值
又一个ie私有属性,不兼容标准。zoom:1可以在测试或者不追求标准的情况下使用,效果不错。
writing-mode: tb-rl
ie私有属性,不推荐用。

IE7 还有一些额外的属性:

min-height: (任意值)
max-height: (除 none 外任意值)
min-width: (任意值)
max-width: (除 none 外任意值)
overflow: (除 visible 外任意值)
overflow-x: (除 visible 外任意值)
overflow-y: (除 visible 外任意值)
position: fixed

重置haslayout.

在没有其它属性激活layout的情况下,使用下面的css可以重置haslayout属性:

  • width, height (设为 “auto”)
  • max-width, max-height (设为 “none”)(在 IE 7 中)
  • position (设为 “static”)
  • float (设为 “none”)
  • overflow (设为 “visible”) (在 IE 7 中)
  • zoom (设为 “normal”)
  • writing-mode (从 “tb-rl” 设为 “lr-t”)

display 属性的不同:当用”inline-block”激活了haslayout 属性时,就算在一条独立的规则中覆盖这个属性为”block”或”inline”,haslayout 这个标志位也不会被重置为 false。

把 mid-width, mid-height 设为它们的默认值”0″仍然会赋予 hasLayout,但是 IE 7 却可以接受一个不合法的属性”auto”来重置 hasLayout。

当一个对象的layout被激活时,它以及它的子对象的定位和尺寸计算将独立进行,不受附近对象的干扰。也就是说它拥有一个独立的布局(layout)。 因此浏览器要花费更多的代价来处理拥有haslayout的对象。为了提高性能,微软增加了layout这个IE私有的概念。

Read More