如题。谢谢
[b]问题补充:[/b]
JavaScript
[b]问题补充:[/b]
页面有很多元素,不想为其一个一个设置id,想用一个js自动生成,类似javaeyeXXXX,XXXX为自动生成。每次访问页面,均有不同的值。
[b]问题补充:[/b]
对应achun:
公司有一产品,近改版,用ajax实现。产品页面id,大都动态获取id。刚收到需求,用selenium测试。周末,不能回去研究其代码,自己有不熟悉这一块,故此一问。
原来是这样,要用ajax实现。那对于动态ID的情况应该属于第2种情况了。
首先是技术选型问题,你用在ajax种用什么技术实现这个。如果你还没有选型的话,
我强烈建议你用我写的前台模板工具[url=http://achun.iteye.com/category/33268]jCT专题[/url],
对于例子来说,由于jCT有3个版本,版本间是不兼容的
1版已经废弃
2版有一个站点在用
3版最近才做出来
建议你看3版的例子,目前例子只有一个,我们的内部测试站点
[url]http://ne.16lo.com/[/url]
[url]http://ne.16lo.com/?entry=achun[/url]
这两个是同样的任务两种不同的写法,现在还没有做完(因为是研发,所以好多东西都是试验)。
你先看看(用firefox+firebug查看吧),如果对我的这种设计方法感兴趣,我们可以进一步联系.
好了该说你的问题了。
既然你的问题属于
2.ID是有规则的,可以用代码计算出来然后对对应的Element进行处理。
也就是id跟数据的含义有关了,比如,如果是分类ID可以用
category_1,
category_2,
category_n
那具体方法和ham说的也查不多。
关键是你的数据和页面表现的装配是如何进行的。既然你说是用javascript来做那用前台模板来实现是再好不过了。
可以达到前台模板的工具有
1.GWT
2.JST
3.jCT
我当然推荐你用[url=http://code.google.com/p/jsct/]jCT[/url]了
如果用java的可以使用java.util.UUID
不好意思, 看错了, 我还以为是java类的 hehe
没明白?举个例子吧
试试
[code="java"]x=document.documentElement.childNodes;//获得所有节点
for (i=0;i<x.length;i++)
{
if (x[i].nodeType==1)
{
x[i].setAttribute("id","javaeye"+i);
document.write(x[i].nodeName);
document.write(x[i].getAttribute("id"));
}
}[/code]
document.documentElement是获取的文档根节点即HTML元素,而通常要设置id的仅仅是BODY中的内容.所以用documentElement只会引起不必要的性能丢失.
其实我的代码和congjl2002的差不多,只是将documentElement改为了body.
[code="js"]
var elements=document.body.childNodes;
for(var i=0;i<elements.length;i++){
if(elements[i].nodeType==1){//这条if语句是为兼容FireFox而准备的.如果只是在IE中使用,则不需要.
elements[i].id="javaeye"+i;
//也可使用congjl2002的方法.
//elements[i].setAttribute("id","javaeye"+i);效果一样.
}
}
[/code]
这样就完成了对所有元素的id动态赋值.
首先楼主这个问题和应用有关的,关键是产生ID后,还能再次访问他。
大概有两种情况:
1.ID是无规则的
2.ID是有规则的,可以用代码计算出来然后对对应的Element进行处理。
大概途径有:
1.想办法替代通过ID来选择Element,处理相应行为。
2.手工代码了设置id
3.用复杂的规则为Element绑定特殊信息,此信息可以再次通过运算来对应Element.
方法3不好讲。我现在没有思路,为这个费太大力气不值得。因为我有更好的方法
方法2可以解决一些特殊的需求。
我这里提供一个自己原创的方法。
[url=http://achun.iteye.com/blog/212054]Action By Class,利用Element 的class触发行为[/url]
这种方法能适应大多数需求,减少了设置ID的数目,变通的解决了你的问题。
对应楼主
每次访问页面,均有不同的值
的要求,不知目的为何?
分开写
关于ajax,这个其实就是个小工具,很容易使用的,我现在熟悉的实现是jQuery的。
我的例子里用的也是jQuery.对于ajax使用当中的一些问题,我的jCT专题里也有解决方案。
要补充的是,由于ajax在执行过程中可能有很多情况造成请求失败,除了网络连接问题造成的ajax error外,就是服务器端的问题了,比如访问量过大,数据库忙,系统动态部分在维护等等,都会造成请求数据失败,我用了一个简单的方法来解决问题,(我的ajax都是基于JSON的)
就是不管那一种失败,服务器都输出一段两端代双引号的文字,这段可以被JSON正确解析正字符串的,也就是说如果ajax获取的数据经过JSON后是一段字符串,那一定是出错了,有了这个判断,对应错误的处理就可以统一进行了。