[Node类]
<1>.scrollIntoView()方法。这个方法的效果就是让指定的node实例出现在窗口内,和锚点定位的效果相近。在不同浏览器下表现不同。在FF下,指定的node节点出现在窗口的底部,也就是“刚刚可见”;在ie6,ie7下无效果,在ie8下出现在窗口顶部,和锚点定位效果一模一样。因为兼容不好,所以这个方法不推荐使用。
<2>.setStyles()方法。YUI终于有了批量处理样式的方法了 T_T,之前写一排setStyle(),或者需要在css中定义个类,然后改变className的日子一去不复返了。虽然后者仍然很有用,但有时仅仅是过渡用的,只需要设内置的样式即可,有了setStyles(),我们就多了一种选择。
<3>.append()方法和.appendChild()方法。.append()和.appendChild()方法都可以为Node实例添加一个子元素,他们都接受Node实例,DOM对象作为参数,但前者还接受字符串,后者不接受,比如myNode.append("<p>hello world</p>")是对的,myNode.appendChild("<p>hello world</p>")就会报错了。另外,官方api文件说.append()方法是void类型,没有返回值,而.appendChild()方法有Node类型的返回值,其实是错误的。.append()方法也会有返回值,只是和.appendChild()的返回值不同。例如,myNode.append(newNode)的返回值是myNode,而myNode.appendChild(newNode)的返回值是newNode。
<4>.compare()方法和.contains()方法都只接受Node和DOM类型的参数,不接受字符串选择符。
<5>.create()方法虽然很容易让人联想到原生的document.createElement()方法,但其实两者是有区别的。.create()方法接受的参数是完整的html,而不是标签名,也就是说,如果要创建一个包含123456为内容的p标签,用原生js需要写var nod = document.creaElement("p"); nod.innerHTML = 123456;而如果用.create()方法,不能用Y.Node.create("p"),而要用Y.node.create("<p>123456</p>");。.create()方法返回的是Node,document.createElement()返回的是DOM。
<6>.delegate()方法接受三个参数,其中第三个参数是对于children的选择符,这里只能是children,不能写node自身,而且不能省略。支持*全选。
<7>.inDoc()方法,.inRegion()方法和.intersect()方法。.inDoc()方法的参数只能是document类型的,不能是普通DOM型或者Node型。如果要测试是否在某个DOM内,可以用inRegion方法,不过,这个方法也支持样式上的重叠,而事实上并没有包含关系的判断。官方api文档中说,.inRegion()方法会返回一个包含位置信息的对象,事实上,这是错的。.inRegion()方法返回的是布尔型。而.intersect()方法才会返回包含位置信息的对象。
<8>.insert()方法和.insertBefore()方法。这两个方法和.append(),.appendChild()方法有些类似,同样的,.insert()方法支持字符串型参数,而.insertBefore()不支持。前者返回值是myNode,后者返回值是newNode。值得一提的是,.insert()方法和第二个参数,用于表明插入位置的参数不好用,并不能按照我想要插入到指定节点前,.insertBefore()的第二个参数就很好用。
<9>.get()方法。Node是DOM封装后的类型,其get方法不仅能获得id,tagName之类DOM.xxx的属性,还能获得region等扩展属性。注,dom的class仍然通过get("className")获得,而不是get("class")。
<10>.getAttribute()方法。一般情况下,其实.get()方法就完全够用了,为什么还要有个.getAttribute()方法呢?对于自定义属性,.get()方法是取不到值的,要使用.getAttribute()方法。例如<div myattr = "adang"></div>,如果用Y.get("div").get("myattr")取的值是undefined,需要用Y.get("div").getAttribute("myattr")取值。