大侠们:      这问题困扰我一天半了,到晚上了,必须请教大侠们了,还请看到后给些建议。      我的需求:      在一张JS页面上,要展现两个smartclient的htmlFlow控件,这两个htmlFlow控件的contents完全一样!
      这就是说,完全相同的一段HTML代码,会在一个页面上出现两次,问题来了,      这完全相同的两段HTML代码,其标签的ID也是相同的(我目前不打算动态生成ID,看还有没有其它办法),
      此时用document.getElementById('aaa')获取标签时,只能获取第一个,始终不能获取下面的几个。      
      高手们,发话吧

解决方案 »

  1.   

    用getElementById
    好像不能实现,id应该是唯一的
    你要一起取得2个标签吗?用name试试呢
      

  2.   

    var names = getElmentsByName()
    names[0]是第一个
    names[1]是第二个
      

  3.   

    一般来说,是不允许有相同id的,最好也不要相同,但是既然你这里不打算改的话只有用下面的模拟方法了
     <div id = 'DIV' class = 'className'>1</div>
        <div id = 'DIV'>2</div>
        <div id = 'DIV'>3</div>    <script language="JavaScript">
        <!--        document.getElementsById = function(id) {
                if (typeof(id) == 'string') {
                    var all = document.getElementsByTagName('*');
                    var length = all.length;
                    var elements = [];
                    while (length) {
                        if (all[--length]['id'] == id) {
                            elements.unshift(all[length])
                        }
                    }
                    return elements.length == 0 ? null : elements.length == 1 ? elements[0] : elements
                }
                return null
            }
            
            alert( document.getElementsById('DIV') )
        //-->
        </script>
      

  4.   

    这样你就可以用getElementsById 注意多个s 方法获得相同ID的引用或者你可以加入name属性,用getElementsByName获得相同名字的一组
      

  5.   

    一句话,加name,用getElmentsByName获取控件数组
      

  6.   


    // 似乎楼上几位恰恰忽略了 IE下用getElementsByName取DIV也是不可以的//还是需要模拟
    <div id = 'DIV' class = 'className'>1</div>
        <div name = 'odiv'>2</div>
        <div name = 'odiv'>3</div>    <script language="JavaScript">
        <!--      
         var getElementsByName = function(tag, name){
     var returns = document.getElementsByName(name);
     if(returns.length > 0) return returns;
     returns = new Array(); var e = document.getElementsByTagName(tag);
     for(var i = 0; i < e.length; i++){
    if(e[i].getAttribute("name") == name){
    returns[returns.length] = e[i];
    }
     }
     return returns;
     }  alert(getElementsByName('div','odiv')[0].innerHTML)
     alert(getElementsByName('div','odiv')[1].innerHTML)
        //-->
        </script>
      

  7.   

    为什么要用相同的id?id本来就是唯一的,在服务器端不是很容易控制html的输出吗,所以加个name属性比较好。
      

  8.   

    这完全相同的两段HTML代码,其标签的ID也是相同的?
    这本身就是一个错误!!!
    难道楼主的浏览器版本低没有检测出来?
      

  9.   

    ID就好比身份证号,
    NAME就是人的姓名尽量不要用相同的ID,可以尝试document.getElementByTagName
      

  10.   

    document.getElementById('aaa')
    改为
    document.getElementsByName('aaa')
      

  11.   

    用户name 或者tagname + attribute 方法
      

  12.   

    Id犹如身份证,不可重名。用name吧,然后得到一个数组,在进行解析
      

  13.   

    jquery('*[id]=ctl_id')不知道能不能获得
      

  14.   

    说实在的,我是在用SMART CLIENT,其中有HTMLFlow控件,我继承了CANVAS控件,模拟出自己的HTMLFlow控件,只是派生类里的contents是一个写死了的HTML字符串,里面有ID,所以当这控件在同一页面被使用多次的时候,一些标签的ID自然就重复了。
      

  15.   

    给html标签加上name属性。页面里面的ID是唯一的,document.getElementById(id),当页面出现多个ID的时候,它最终取一个ID节点。那个节点就是最后一个id节点。
    如前面的几位楼主所说,使用document.getElementsByName(name);这个方法返回一个数组。
    重写document.getElementById = function(){} ;也行。但是何必多次一举呢。