zoukankan      html  css  js  c++  java
  • JavaScript通过元素id和name直接获取元素的方法

    概览:

    偶然的机会,我在JavaScript中直接用HTML元素的id属性来获取该元素,并设置该元素的其他属性值,竟然能够正确解析不报错!于是我去查阅相关资料,也有其他同行这么用。

    虽然说这种用法不是标准用法,推荐使用 document.getElementById(id);document.getElementByName(name); ,但也是一种新发现,先记录下来,以备后用。

    本文讲述了JavaScript通过元素id和name直接获取元素的方法,以及自己在实践过程中总结的注意事项。

    具体分析如下:

    我们知道一些第三方的js库对如何快速选取html中的元素做了一些简化,貌似十分高深莫测,其实也不然。而且js本身自带了对于特殊元素的简便选取的方法,下面就为大家简单介绍下。

    在html中,一般最直接的辨别html元素使用的是name和id属性,两者有着细微的不同:id必须页面唯一,但name可以有重复。

    在js中如果id名称不和内置属性或全局变量重名的话,该名称自动成为window对象的属性,而在一个html页面中的最顶层环境中有: this === window .

    所以如果我们写一个如下的html元素代码:

    1 <input type="button" id="btn_ok" value="Ok" onclick="..." />

    就可以这样引用它:

    1 //可以这样引用
    2 btn_ok.onclick = function(){};
    3 //或者下面也是一样的
    4 window.btn_ok.style = ...;

    对于name属性来说,只有某些类型的html元素具有类似的方法,比如:form,img,iframe,applet,embed,object等。在这些元素中可以通过全局变量或者document的属性来访问特定name属性的元素;如果相同name属性的有多个元素,则返回一个NodeList的类似只读数组的对象,例如如下代码:

    1 <div>
    2   <img name="pic" src="#" alt="pic_0" />
    3   <img name="pic" src="#" alt="pic_1" />
    4   <img name="pic" src="#" alt="pic_2" />
    5 </div>

    我们可以这样引用name为pic的元素:

    1 //我们可以这样引用name为pic的元素:
    2 for(x in pic)
    3  console.log(pic[x].alt);
    4 //或者是非"标准"语法each语句方式
    5 for each(img in pic)
    6  console.log(img.alt);

    其他同行的观点:
    ①这个最初是 IE 里面的,后来 firefox chrome 好像也支持了。不建议使用,这个不是标准里面的,将来不一定支持。

    ②可以直接这样写的id.style.display="inline";使用id相当于直接成为了window对象的属性,使用window.id可以获取,但是不推荐这种写法,还是用getElementById或者querySelector好。

    ③getElementById getElementByTagName等方法都是DOM Core的组成部分,并不专属于js,支持DOM的任何一种程序设计语言都支持他们,比如XML编写出来的文档。还有HTML-DOM,比如onclick属性,他们在DOM Core出现很久之前就为人们所熟悉了。你举的这个例子就是属于HTML-DOM,比如,我们可以把下面的语句:document.getElementById('form')简化为 document.form,类似的element.getAttribute('src')简化为element.src.HTML-DOM通常更短,但是只能用来处理web文档。

    我在实践过程中发现的问题:

    ①在HTML元素属性如onclick的JavaScript中直接用id获取元素没有问题;

    ②在<script></script>内的JavaScript中直接使用id获取元素:如果被引用HTML元素在form窗体标记内,解析用id获取的元素时报异常undefined;如果被引用HTML元素不在form窗体标记内,则解析没有问题。

    参考链接:http://www.jb51.net/article/65099.htm

  • 相关阅读:
    DataTable不能通过已删除的行访问该行的信息解决方法
    datatable删除行之datatable.Rows[i].Delete()。标记之后行没有了
    js判断字符串是否在数组中
    发布webservice之后调用不通
    实体类配置xml相关属性排序问题、json前后台交互
    Java堆和栈的区别 经典总结
    Java IO
    XSL 简明教程 (下)
    XSL 简 明 教 程(上)
    跟我学XSL
  • 原文地址:https://www.cnblogs.com/Scl891004X/p/6134416.html
Copyright © 2011-2022 走看看