Javascript 获取asp.net 控件问题
想编写一个函数(JS)来获取asp.net中DataList模板里面的控件Label值注意:这里的控件都为服务器控件因为考虑到datalist里面的Label的id是变化...
想编写一个函数(JS) 来获取asp.net 中DataList模板里面的控件Label值 注意:这里的控件都为服务器控件
因为考虑到datalist里面的Label的id是变化的,能不能动态获取label的id进而获取它的值 展开
因为考虑到datalist里面的Label的id是变化的,能不能动态获取label的id进而获取它的值 展开
4个回答
展开全部
给label加class,用jQuery来获取,既能满足CSS的需要,也能满足JS取得元素的需要。因为当页面引用不同的masterPage,它的ID是会变的,而加name降低了代码的简洁性,所以加class最好。
如果不想用jQuery,这里有取class的方法:
var bpGet=new Object();
bpGet.getElementsByClassName=function
(targetClass,targetTag,targetParent){
var targetParent=targetParent||document;
var aTags=(targetTag=='*' && targetParent.all)?targetParent.all:targetParent.getElementsByTagName(targetTag);
targetClass=targetClass.replace(/\-/g,'\\-');
var oReg=new RegExp('(^|\\s)'+targetClass+'(\\s|$)');
var aMatchElements=new Array();
for(var i=0; i<aTags.length; i++){
var oElement=aTags[i];
if(oReg.test(oElement.className)){
aMatchElements.push(oElement);
}
}
return aMatchElements;
}
//用法:var aListSpan=bpGet.getElementsByClassName('classABC','*');
//第三个参数选填,一般情况下不用。
//此方法返回一个数组
____________________________________________________________________
回答你的追加问题:
理论上可以动态获取ID,只要你掌握规律,不怕麻烦就行。你要考虑几个问题:1.ID前缀,就像这样ctl00_ContentPlaceHolder1_infoList3_DataList1_ctl02_imgInfo(其实我只设置了ID为"imgInfo");2.服务器到底根据数据库条数生成了多少个Label出来,否则你就没法for循环(如果你想说遍历,那不如直接用jQuery);
3.最关键的问题,ID动态生成就是说ID在不同环境下的解析很可能会不一样,比如我曾遇到过,IE7下的ID是XXX$XXX$XXX,同样的代码在IE8里就变成了XXX_XXX_XXX,你怎么去保证任何状况下,程序会用相同的规律去生成ID?
建议你用class,把控制权掌握在自己手中,而不是服务器动态生成。
如果不想用jQuery,这里有取class的方法:
var bpGet=new Object();
bpGet.getElementsByClassName=function
(targetClass,targetTag,targetParent){
var targetParent=targetParent||document;
var aTags=(targetTag=='*' && targetParent.all)?targetParent.all:targetParent.getElementsByTagName(targetTag);
targetClass=targetClass.replace(/\-/g,'\\-');
var oReg=new RegExp('(^|\\s)'+targetClass+'(\\s|$)');
var aMatchElements=new Array();
for(var i=0; i<aTags.length; i++){
var oElement=aTags[i];
if(oReg.test(oElement.className)){
aMatchElements.push(oElement);
}
}
return aMatchElements;
}
//用法:var aListSpan=bpGet.getElementsByClassName('classABC','*');
//第三个参数选填,一般情况下不用。
//此方法返回一个数组
____________________________________________________________________
回答你的追加问题:
理论上可以动态获取ID,只要你掌握规律,不怕麻烦就行。你要考虑几个问题:1.ID前缀,就像这样ctl00_ContentPlaceHolder1_infoList3_DataList1_ctl02_imgInfo(其实我只设置了ID为"imgInfo");2.服务器到底根据数据库条数生成了多少个Label出来,否则你就没法for循环(如果你想说遍历,那不如直接用jQuery);
3.最关键的问题,ID动态生成就是说ID在不同环境下的解析很可能会不一样,比如我曾遇到过,IE7下的ID是XXX$XXX$XXX,同样的代码在IE8里就变成了XXX_XXX_XXX,你怎么去保证任何状况下,程序会用相同的规律去生成ID?
建议你用class,把控制权掌握在自己手中,而不是服务器动态生成。
展开全部
在客户端,服务端控件会被自动解析成客户端的HTML.
在页面里看看右键看源代码,可以看到datalist被转换成html,然后你用js(推荐使用jquery,很快很方便)获取这些html元素就可以了.
在页面里看看右键看源代码,可以看到datalist被转换成html,然后你用js(推荐使用jquery,很快很方便)获取这些html元素就可以了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你用下JQuery,虽然ID是变化的,但是前部分应该都是一样的,如果
你想定位某一个,可以在后台绑定时间里多加上一个标记自定义属性
你想定位某一个,可以在后台绑定时间里多加上一个标记自定义属性
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果放在Datalist中,控件名称一般会变,如果你不考虑通用性的话,可以查看源文件,找到你想要获取的控件,查看ID,直接获取!如果你想通用的话,建议给里面的控件加一个name属性,通过name来查找吧~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询