【问题标题】:How to set a value of the textarea without id by javascript?如何通过javascript设置没有id的textarea的值?
【发布时间】:2011-12-04 15:24:44
【问题描述】:

通常我们运行 javascript 代码来设置任何值:

document.getElementById('id_name').value = "...";

但我有一个这样的页面:

<div id="id_name">
    <div class="class_name">
        <textarea></textarea>
    </div>
</div>

如何通过javascript设置textarea的值?

非常感谢您的帮助!

【问题讨论】:

    标签: javascript textarea


    【解决方案1】:

    如果你的 HTML 真的那么简单,你可以这样做:

    var textarea = document.getElementById('id_name').getElementsByTagName('textarea')[0];
    textarea.value = "hello world";
    

    在较新的浏览器中还有一个“getElementsByClassName()”,可用于查找“class_name”&lt;div&gt; 元素,您可以从中执行“getElementsByTagName()”调用。

    【讨论】:

      【解决方案2】:

      现代浏览器 support 选择器 API(通过 querySelector),让您可以非常轻松地做到这一点:

      document.querySelector("#id_name > .classname > textarea").value = "foo";
      

      为了完整起见,我应该提一下,这将对匹配选择器的 first 元素进行操作(当然,您也可以调整选择器)。如果有可能有许多需要定位的元素,您可以切换到querySelectorAll 和一个循环。

      【讨论】:

        【解决方案3】:

        有几种不同的可能性和许多背景:

        document.querySelector("textarea").value = "Your text";// Set a first textarea find in a page.
        
        document.querySelectorAll("textarea").value = "Your text";// Set all textarea find in a page.
        
        document.getElementById('myForm').querySelector("textarea").value = "Your text";// Set a textarea into a form: (frequently used).
        

        【讨论】:

          【解决方案4】:

          您可以使用 DOM 属性和方法从任何固定点获取该元素(例如,从您的div确实有一个id)。在你的情况下,这很容易:

          document.getElementById('id_name').firstChild.firstChild.value = /* ... */;
          

          ...假设您已经为我们格式化了 HTML,它看起来真的像这样:

          <div id="id_name"><div class="class_name"><textarea></textarea></div></div>
          

          如果该假设不成立,那么您必须做更多的工作,因为firstChild 很可能是Text node(包含空格)而不是Element。如果是这样,使用辅助函数仍然相当简单:

          function firstElement(node) {
              while (node && node.nodeType !== 1) { // 1 = Element
                  node = node.nextSibling;
              }
              return node;
          }
          
          var n = document.getElementById("id_name");
          n = firstElement(n);
          n = firstElement(n);
          n.value = /* ... */;
          

          这就是为什么这么多 JavaScript DOM 操作库如雨后春笋般涌现的原因:因为当直接使用 DOM 时,常见的用例常常很尴尬。

          参考资料:

          【讨论】:

            猜你喜欢
            • 2021-02-08
            • 1970-01-01
            • 2011-05-07
            • 2013-01-16
            • 1970-01-01
            • 1970-01-01
            • 2016-11-20
            • 1970-01-01
            相关资源
            最近更新 更多