代码之家  ›  专栏  ›  技术社区  ›  CindyH

我应该何时使用getElementById?

  •  1
  • CindyH  · 技术社区  · 15 年前

    我是一名经验丰富的开发人员,但对javascript还不熟悉。我不知道什么时候应该使用整个“document.getElementById(e.id).value”,什么时候可以只使用“e”。我在看一个公共函数脚本中的一个小函数,它使用了这两个函数。

    函数RemoveFormat(e){
    document.getElementById(e.id).value= cleanNumber(document.getElementById(e.id).value); e、 选择();}

    (其中cleanNumber是另一个常用函数)

    大概有一些情况需要额外的打字,但它们是什么?

    谢谢

    7 回复  |  直到 15 年前
        1
  •  5
  •   fphilipe    15 年前

    如果 e document.getElementById(e.id) ,你也会得到同样的结果。

        2
  •  2
  •   Grant Wagner    15 年前

    您的示例演示了何时有对要控制的元素的引用。如果已经有对元素的引用,则没有理由使用 document.getElementById 要获取对它的引用(您已经有一个):

    <span id="mySpan" onclick="test(this);">TEST</span>
    <script type="text/javascript">
    function test(el) {
        // el is a reference to an element, you can use it directly
        el.style.display = 'none';
    
        // to demonstrate that the element you retrieve from gEBI 
        // with el.id is the same as your original reference
        var elAgain = document.getElementById(el.id);
        alert(elAgain === el); // "true"
    }
    </script>
    

    你可能想使用的地方 当您想要控制另一个尚未引用的元素时:

    <span id="mySpan" onclick="test(this, 'myDiv');">TEST</span>
    <div id="myDiv" style="display:none;">DIV REVEALED</div>
    <script type="text/javascript">
    function test(el, otherElId) {
        // el is a reference to an element, you can use it directly
        el.style.display = 'none';
        // otherElId is a string containing the id of
        // the element you want to control
        var theDiv = document.getElementById(otherElId);
        theDiv.style.display = '';
    }
    </script>
    

    <span id="mySpan" onclick="test('mySpan');">TEST</span>
    <script type="text/javascript">
    function test(theElId) {
        var el = document.getElementById(theElId);
        el.style.display = 'none';
    }
    </script>
    

    如果函数是从元素事件触发的,则只需传递 this (根据我的第一个示例),而不是传递事件发生的元素的id。

        3
  •  2
  •   Jiayao Yu    15 年前

    getElementById()只是根据给定的ID(字符串)查找DOM对象,如果找到它,则返回它。

    但是 E 在本例中,它只是一个任意变量,可能是DOM对象,也可能是字符串。这取决于源代码其余部分的上下文。

    getElementById()是必需的

    <input id="mytext" type="text" onchange="RemoveFormat('mytext')" />
    

    getElementById()是不必要的 如果您的代码如下所示:

    <input id="mytext" type="text" onchange="RemoveFormat(this)" />
    

    一般来说,我更喜欢尽可能使用“this”方法,因为它会清理javascript。但有时并不合适。因此,我在javascript中使用了一个命名约定,它可以帮助我记住我使用的方法。比如,我将使用变量名e表示DOM对象,或者使用id表示字符串。这将有助于您在代码中保持正确。

        4
  •  1
  •   ChaosPandion    15 年前

    没有理由这样做。

    e.value = cleanNumber(e.value);
    
        5
  •  0
  •   Rigobert Song    15 年前

    从外观上看,您可以将元素传递到函数中,但要从dom中获取元素,您需要执行以下操作:

    var e = document.getElementById('elementId')
    
        6
  •  0
  •   Thom Smith    15 年前

    确切地说,功能

    function f (e) {
        return document.getElementById(e.id);
    }
    

    假设

        7
  •  0
  •   olliej    15 年前

    nodeId是一个非标准的IE扩展,仅出现在最新版本的firefox中,每当您使用它时,它都会记录一条警告。但其他问题是,如果任何人定义的变量或函数的名称与节点标识符冲突,则该变量或函数将覆盖节点引用。

    这些细节加在一起意味着您无法保证在使用window.nodeId时完全正确的行为,而document.getElementById始终正常工作。