论坛首页 Web前端技术论坛

利用CSS取得某类子代的先祖集合的疑问

浏览 2062 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-17  
CSS
比如需要快速定位到所有含有th的table对象
比如用prototype可以这样做
$$('th').each(function (th) {
  var tableObj = th.up('table');
  blarblarblar...
})

但是想像一下就会感觉效率很低,有什么高招否?
   发表时间:2008-09-17  
你这个如果一个table包含多个th,得重复遍历多少次?

效率这么低,为什么非得用它的内置方法:
var tables = document.getElemenstByTagName("table"), arrTables = [];
for(var i=0, l=tables.length, i<l; i++){
	var table = tables[i];
	if(table.getElemenstByTagName("th").length)
		arrTables[arrTables.length] = table;
}
alert(arrTables)


如果非得用,那就这样吧:
$$('table').each(function (table) {   
  if(table.getElemenstByTagName("th").length){
    // 你就blarblarblar...  
  } 
});

0 请登录后投票
   发表时间:2008-09-17  
恩恩
正是想到了可能会有效率低下,才来提个问题的

对节点使用getElemenstByTagName来取得是否存在子节点,不错不错,先收下了
多谢

选择器上有按父亲选子孙的,为什么就没有相反的呢
0 请登录后投票
   发表时间:2008-09-17  
不过仍然还是有个问题
2楼的方法与我在顶楼的效果并不完全相同

考虑一下下面的情况
<table id=t1>
 <tr><td>
  <table id=t2>
   <tr><th>
  </table>
</table>

用2楼的方法就会让t1也有边框,顶楼的方法只会在t2有边框
类似于子代选择器和子选择器的区别
0 请登录后投票
   发表时间:2008-09-17  
嵌套表格除非极少的情况使用,
否则不论从前端表现与结构分离、以及行为交互层来说,都极为不可取。

0 请登录后投票
   发表时间:2008-09-17  
softsoft 写道
恩恩
正是想到了可能会有效率低下,才来提个问题的

对节点使用getElemenstByTagName来取得是否存在子节点,不错不错,先收下了
多谢

选择器上有按父亲选子孙的,为什么就没有相反的呢


效率,以及HTML流的顺序。


CSS最初设计的原则就是要避免回溯(除了极个别的如last-child伪类之外)
此外要避免实现上可能出现的性能问题,因此要保证都是常数时间内可计算。

参见:http://www.terrainformatica.com/?p=99
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics