• 转载 Javascript访问html页面的控件


     访问控件的主要对象是:document对象。分别对应当前文档所有的(子对象)个人观点。并且已经提供的几个主要方法来访问对象。
    1.       document.getElementById
    2.       document.getElementsByName
    3           document.getElementsByTagName
    4           document.all

    下面我主要谈谈以上几个方法的具体用法:
      一.首先我来谈谈document.getElementById的用法。
    Var obj=document.getElementById(“ID”) 根据指定的ID属性值得到对象。返回id属性值等于ID的第一个对象的引用。假如对应的为一组对象,则返回该组对象中的第一个。
    <input name=”a” type=”text” id=”b”/>
    <input name=”b” type=”text” id=”a”/>  
    <input type=”button” name=”submint1” value=”text1” onclick=:”alert(document.getElementById(“b”)/>)”<input type=”button” name=”submint2” value=”text2” onclick=”alert(document.getElementById(“a”)/>)”我在IE中测试了上面代码,在第一个文本框中输入1,在第二个文本中输入2,然后点击两个按钮,大吃一斤。结果两个按钮都返回了第一个文本框的值。这说明了IE执行document.getElementById(elementName)的时候,返回的是第一个name或者id等于elementName的对象,并不是根据ID来查找的。
    但相反我在firefox中就不存在这个问题。Firefox执行document.getElementById(elementName)的时候只能查找ID等于elementName对象,如果不存在在返回null.
    二.下面看看document.getElementsByName的用法。
    Var obj=document.getElementsByName(“Name”)根据Name属性的值获取对象集合。返回name等于指定Name对象的集合。注意这里返回的是一个集合,包括只有一个元素的情况也是一个集合。
    document.getElementsByName("name")[0?1?2?3?....] 这样来获取某一个元素。注意javascript中的集合取一个值可以用[],也可以用(),(本人测试通过,但没有资料这么写)。
    如:
    <script>
    function prop()
    {
    var objs=document.getElementsByName("a");
    alert(objs(0).value);//或者可以alert(objs[0].value)也正确的。
    }
    </script>
    <input type="text" name="a" id="b" value="this is textbox"/>
    <input type="button" value="testing" onclick="prop()"/>
    三.Document.getElementsByTagName的用法:
    Var ojbs=document.getElementsByTagName(“Tag”)根据基于指定元素名称对象的集合。返回Tag属性等于指定Tag标记的集合。这里也返回的是一个集合。(同上)
    四.document.all用法。
    document.all是页面内所有元素的一个集合。例如:
    document.all(0)表示页面的第一个元素。
    Document.all(“txt”)表示页面上idname等于txt的所有对象的单个元素和集合元素。
    如果页面上的idname等于txt只有一个元素(包括nameid情况),那么document.all()的结果就只是一个元素,反之就是获取一个集合。(综合了document.getElementByIddocument.getElementsByName的各自的特点)。
    也可以这样写:document.all.txt也是一样。
    例如:
    <input   name=aaa   value=aaa>
    <input   id=bbb   value=bbb>
     <script   language=Jscript>
          alert(document.all.aaa.value)     //根据namevalue 
          alert(document.all.bbb.value)     //根据idvalue 
     </script>
    代码2
     但是常常name可以相同(:checkbox取用户的多项爱好的情况)
     <input   name=aaa   value=a1> 
     <input   name=aaa   value=a2>  
     <input   id=bbb   value=bbb>  
     <script   language=Jscript>  
         alert(document.all.aaa(0).value)//显示a1
         alert(document.all.aaa(1).value)//显示a2 
         alert(document.all.bbb(0).value)//这行代码会失败   
     </script>  
    理论上一个页面中的ID是互不相同的,如果出现不同的tags而有相同的id的话,document.all.id就会失败,就象这样:<input   id=aaa   value=a1> 
     <input   id=aaa   value=a2>
     <script   language=Jscript> 
          alert(document.all.aaa.value)//显示undefined而不是a1或者a2
     </script>
    所以说遇到了这种情况的话用下面这种写法:
     <input   id=aaa   value=aaa1> 
     <input   id=aaa   value=aaa2>
     <input   name=bbb   value=bbb>
     <input   name=bbb   value=bbb2>
     <input   id=ccc   value=ccc>
     <input   name=ddd   value=ddd> 
     <script   language=Jscript>
    alert(document.all("aaa",0).value)
    alert(document.all("aaa",1).value)
    alert(document.all("bbb",0).value)
    alert(document.all("bbb",1).value)
    alert(document.all("ccc",0).value)
    alert(document.all("ddd",0).value) 
     </script>
    另外document.all可以判断浏览器的种类是否是IE,
    document.all---------针对IE
    document.layers------------针对Netscape

    这两个集合.all只在ie里面有效,layers只在nc里面有效
    所以就可以通过这个方式来判断不同的浏览器。
    最后我来说说getElementByIdgetElementsByName使用范围:
    Id就像身份证号,是唯一的,name就像姓名一样可以同名。
    一个元素定义了id,引用该元素时直接用id属性,而name通常用在form中,且必须由document.form.***而来,也就是说,name 属性定义的元素在脚本中是document 对象的子对象。
        1. name用于form内元素,提交需要.
           id用于form外元素好用因为   DOM   能直接取得单一元素 
        2.id 每页只能有一个
          name 可以有多个 name   有些标签不推荐用它
        3. 表单元素(form input textarea select)与框架元素(iframe frame) name这些元素都与表单   (框架元素作用于formtarget)提交有关, 在表单的接收页面只接收有name的元素 ,   ID 的元素通过表单是接收不到值的, 你自己可以验证一下有一个例外A 可以赋 name 作为锚点, 也可以赋 ID;只能赋ID不能赋name的元素:(除去与表单相关的元素都只能赋   ID)   body li   table   tr   td   th   p   div   span   pre   dl   dt   dd   font   b   等等。
    这里我引出另一个问题,既然有了ID那为什么还要name?
    最直接答案:ID就像是一个人身份证号,而 name就像是他的名字,ID虽然是唯一的,但name是可以重复的。
        具体来说:
    对于ID来说,它就是ClientHTML元素的Identity 。而Name 其实要复杂的多,因为   Name   有很多种的用途,所以它并不能完全由ID来代替,从而将其取消掉。
          参考网站资料如下:具体用途有:
      用途   1:     作为可与服务器交互数据的   HTML   元素的服务器端的标示,比如   input     select      textarea   、和   button   等。我们可以在服务器端根据其   Name   通过   Request.Params   取得元素提交的值。      用途   2:     HTML   元素   Input   type= "radio "   分组,我们知道   radio   button   控件在同一个分组类,   check   操作是   mutex   的,同一时间只能选中一个   radio   ,这个分组就是根据相同的   Name  属性来实现的。
        
    用途   3:     建立页面中的锚点,我们知道   <a   href="URL" >link </a >   是获得一个页面超级链接,如果不用   href   属性,而改用   Name   ,如:   <a   name="PageBottom" > </a >   ,我们就获得了一个页面锚点。
        用途   4:     作为对象的   Identity   ,如   Applet      Object      Embed   等元素。比如在   Applet  对象实例中,我们将使用其   Name   来引用该对象。
      用途   5:        IMG   元素和   MAP   元素之间关联的时候,如果要定义   IMG   的热点区域,需要使用其属性   usemap   ,使   usemap="#name"(   被关联的   MAP   元素的   Name)
      用途   6:     某些特定元素的属性,如   attribute   ,和   param   。例如为   Object   定义参数   <PARAM   NAME   =   "appletParameter"   VALUE   =   "value" > .
      显然这些用途都不是能简单的使用 ID来代替掉的,所以HTML元素的ID   Name的却别并不是身份证号码和姓名这样的区别,它们更本就是不同作用的东西。 当然HTML元素的Name属性在页面中也可以起那么一点ID的作用,因为在   DHTML对象树中,我们可以使用 document.getElementsByName 来获取一个包含页面中所有指定Name元素的对象数组。
      在这里顺便说一下,要是页面中有n(n >1)    HTML   元素的   ID   都相同了怎么办?在 DHTML   对象中怎么引用他们呢?如果我们使用   ASPX   页面,这样的情况是不容易发生的,因为 aspnet进程在处理aspx 页面时根本就不允许有   ID   非唯一,这是页面会被抛出异常而不能被正常的render。要是不是动态页面,我们硬要让   ID   重复那   IE   怎么搞呢?
        这个时候我们还是可以继续使用   document.getElementById   获取对象,只不过我们只能获取ID重复的那些对象中在HTML Render时第一个出现的对象。而这时重复的   ID会在引用时自动变成一个数组,ID重复的元素按 Render的顺序依次存在于数组中。
    getElementById("xxx")返回第一个id属性为"xxx"或者特定表单元素name"xxx"的元素
    getElementsByName("xxx")返回所有id属性为"xxx"或者特定表单元素name"xxx"的元素
    这里要说明一下其实getElementByIdgetElementsByName取元素的范围是一样的,区别只是前者只返回第一个元素后者返回所有元素的集合 
         另外说明一下表单元素 表单元素指的是在<FORM >标签中数据可以被提交给服务器的标签
    主要有 <INPUT > <SELECT > <TEXTAREA >三个标签 这三个标签只有在name属性不为空的时候才能将数据提交给服务器 所以这三种标签多定义了一个name属性 其实这个name属性和id属性是完全一样的都可以定位元素
    如果不是表单元素 就算你加了name属性getElementsByName也取不到不信你自己试试.
  • 相关阅读:
    清理iOS工程里无用的图片,可瘦身ipa
    NSTimer内存泄漏导致控制器不调用dealloc
    iOS面试题 -总结 ,你的基础扎实吗?
    Xcode找不到模拟器出现"My Mac"
    前端开发
    并发编程&数据库
    数据库
    4.2
    4.5
    4.4
  • 原文地址:https://www.cnblogs.com/liufei88866/p/943412.html
Copyright © 2020-2023  润新知