今日看了下Wicket框架的实现思想,发现其使用了命名空间的方式定义一些特定属性,这种方法可以实现无污染html结构。于是自己便有了name来实现html元素的组件化,而不使用自定义标记,从而可以实现完全合法的xhtml标记。对name的命名使用一种命名空间的思想,如name="myframe:tree",但这里我突然产生一个小疑问?name可以使用冒号定义吗?做了简单的测试,无论是name或id或者其他的属性,其值基本都是可以使用任何可以在屏幕输出的字符的,如存数字、空格、各种特殊字符、汉字等,无论怎样定义都能通过js对其处理,如document.getElementById、document.getElementsByName等。html的属性值的定义是不受限制的!
利用这个特性,可以很好的实现一种类似命名空间方式的name定义。而且不易造成命名冲突,其实除了使用冒号我们也可以使用类似程序中的点号方式命名,如name="com.topsoft.comp.grid"等,虽然命名有点长,但也有很多优点,这个大家都能明白。
以后我们在设计html组件的实现可以考虑这种做法,尽可能不使用自定义标记,尽可能用标准的语义化的html标记。
(PS:尽管id和name的定义可以不受限制,但在使用中也应慎重考虑,不要设一些莫名其妙的值,这都是需要付出一定代价的,呵呵~)