【问题标题】:Update two same value in html with one ajax response用一个 ajax 响应更新 html 中的两个相同值
【发布时间】:2009-07-21 13:57:53
【问题描述】:

我在页面的不同位置有两个<span> -tags 具有相同的ID。我知道两次使用同一个 ID 是错误的。将ID更改为类对我来说没问题。

HTML:

<span id="tumme">4</span>
...
<span id="tumme">4</span>
....

更新

AJAX:
document.getElementById(tumme).innerHTML = xmlHttp.responseText;

但仅在&lt;span&gt; 上更新。

有什么想法吗?

【问题讨论】:

    标签: php javascript html ajax


    【解决方案1】:

    来自 W3C 网站关于 id 的 (http://www.w3.org/TR/REC-html40/struct/global.html#h-7.5.2):

    此属性为元素分配名称。此名称在文档中必须是唯一的。

    换句话说,给第二个 span 另一个 id 来修复它。

    【讨论】:

    • 但我需要跨度具有相同的标识。上课就好了。但是如何使用 ajax 更新类?
    • 一般不建议多次使用同一个id。按类更新元素可以通过遍历 dom 和检查类来完成。更容易使用例如 jQuery 并执行类似 $(".yourClass").html(response);
    【解决方案2】:

    将 id= 更改为 class= 因为 2 个具有相同 id 的元素是错误的

    然后要么使用 jQuery 及其强大的选择器,要么使用 function some guy wrote 按类名获取所有元素

    【讨论】:

      【解决方案3】:

      由于每个文档的 id 必须是唯一的,因此不能有两个具有相同 id 的元素。寻找其他方法来识别元素。类是将元素标记为组成员的标准方法。你也可以给他们不同的ID,然后将这些ID存储在一个数组中。

      <span class="tumme"> 4 </span>
      

      然后,当您从 XHR 请求中获取数据时,找到所有元素并遍历它们。虽然您可以滚动自己的方法来按类名获取元素,但使用an existing one 更容易。

      循环遍历它们只是以下情况:

      for (var i = 0; i < elements.length; i++) {
          elements[i].innerHTML = xmlHttp.responseText;
      }
      

      【讨论】:

      • 我认为这里的问题是他需要知道如何找到所有这些元素
      • @David Archer:嗯。再次阅读我的答案。我提出了两种识别元素的方法,并描述了在每种情况下如何获取它们。
      【解决方案4】:

      使用 getElementsByClass:

      function getElementsByClass(searchClass,node,tag) { var classElements = new Array(); if ( node == null ) node = document; if ( tag == null ) tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; }

      【讨论】:

        【解决方案5】:

        好吧,您可以使用 NAME 属性。拥有多个具有相同名称的节点是完全有效的。

        所以你会有这些节点:

        <span id="somethingUnique1" name="tumme"></span>
        <span id="somethingUnique2" name="tumme"></span>
        

        要更新它们,您可以执行以下操作:

        var nodes = document.getElementsByName("tumme");
        for (var i = 0, node; node = nodes[i]; i++) {
          node.innerHTML = xmlHttp.responseText;
        }
        

        【讨论】:

        • 而且你真的不需要跨度上的ID;我只是把它放在一边。
        • 虽然多个元素具有相同的名称是有效的,但跨度具有任何名称是否是无效的。
        • @David Archer:你不是。 HTML 中没有数组的概念。
        • 对不起@David Dorward,我删除了我的评论。没错,但我是从人类可读的角度出发的。例如,同名表单中的多个元素将作为数组发布,不是吗?
        • @David Archer:不。具有相同名称的多个元素将作为序列化字符串发布,其中包含两次等号之前的相同标记。当它被反序列化时,它可能会被转换为一个数组。
        猜你喜欢
        • 1970-01-01
        • 2012-02-17
        • 2015-09-05
        • 1970-01-01
        • 2022-07-06
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        • 2020-03-25
        相关资源
        最近更新 更多