ParentNode.getElementById() 不起作用

发布于 2024-12-07 14:57:21 字数 1774 浏览 0 评论 0原文

我在练习html的时候遇到了一个问题。当我在 JavaScript 中使用 parentNode 时,我认为这并不难处理。

但是使用 getElementById 或其他函数获取 parentNode 下的某些元素并不符合我的想法。

var this_question = selectObj.parentNode.parentNode;
    alert(this_question); //it is working perfectly
    alert(this_question.getElementById('question'))

它不起作用。我无法理解...

<script>
function addQuestion(selectObj) {
    var this_question = selectObj.parentNode.parentNode;
    alert(this_question); //it is working perfectly
    alert(this_question.getElementById('question')) //It's not working. I can't understand..
}
</script>

<ol id="question_list">
    <li>
        <textarea class="question" name="question" id="question"></textarea>
        <select name="question_type" id="question_type" onChange="javascript:selectEvent(this)">
            <option>-----</option>
            <option value="text" >단답형</option>
            <option value="paragraph" >서술형</option>
            <option value="multiple_choice">다지선</option>
            <option value="checkbox">다중선택</option>
            <option value="scale">scale</option>
        </select>   

        <div id='answer_div'><p>부가설명:<input name='top_label' id='top_label' type='paragraph' /></p> <p>답변:<input name='answer_text' id='answer_text' type='text' /></p></div>

        <p>
            <input type="button" value="Add Question" onclick="javascript:addQuestion(this)"/>
            <input type="button" value="Done" onclick="javascript:finish()"/>
         </p>
    </li>
</ol>

I encountered a problem while practicing html. When I used parentNode in JavaScript, I thought it is not hard to treat.

But to get some element under parentNode using getElementById or another function is not working as my thinking.

var this_question = selectObj.parentNode.parentNode;
    alert(this_question); //it is working perfectly
    alert(this_question.getElementById('question'))

It's not working. I can't understand...

<script>
function addQuestion(selectObj) {
    var this_question = selectObj.parentNode.parentNode;
    alert(this_question); //it is working perfectly
    alert(this_question.getElementById('question')) //It's not working. I can't understand..
}
</script>

<ol id="question_list">
    <li>
        <textarea class="question" name="question" id="question"></textarea>
        <select name="question_type" id="question_type" onChange="javascript:selectEvent(this)">
            <option>-----</option>
            <option value="text" >단답형</option>
            <option value="paragraph" >서술형</option>
            <option value="multiple_choice">다지선</option>
            <option value="checkbox">다중선택</option>
            <option value="scale">scale</option>
        </select>   

        <div id='answer_div'><p>부가설명:<input name='top_label' id='top_label' type='paragraph' /></p> <p>답변:<input name='answer_text' id='answer_text' type='text' /></p></div>

        <p>
            <input type="button" value="Add Question" onclick="javascript:addQuestion(this)"/>
            <input type="button" value="Done" onclick="javascript:finish()"/>
         </p>
    </li>
</ol>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最舍不得你 2024-12-14 14:57:21

getElementById() 是文档的方法,在元素中不可用。

您可以使用:

this_question.getElementsByTagName('textarea')[0]

getElementsByTagName() 在 elements 中可用。

getElementById() is a method of documents, not available in elements.

You may use:

this_question.getElementsByTagName('textarea')[0]

getElementsByTagName() is available in elements.

逆光飞翔i 2024-12-14 14:57:21

您有两个具有相同 id 属性的元素,但 id 属性必须是唯一的:

当您重复 id 属性时,会发生奇怪的事情。例如,如果您将

http://jsfiddle.net/ambigously/67DZr/

来自 HTML4 规范

id = 姓名 [CS]
该属性为元素指定一个名称。该名称在文档中必须是唯一的。

以及 HTML5 规范

id 属性指定其元素的唯一标识符 (ID)。该值在元素的主子树中的所有 ID 中必须是唯一的,并且必须至少包含一个字符。

You have two elements with the same id attribute but id attributes must be unique:

  1. <ol id="question">
  2. <textarea class="question" name="question" id="question"></textarea>

When you duplicate id attributes strange things happen. If you change the <textarea> to have id="question_text", for example, things start working better:

http://jsfiddle.net/ambiguous/67DZr/

From the HTML4 specification:

id = name [CS]
This attribute assigns a name to an element. This name must be unique in a document.

and from the HTML5 specification:

The id attribute specifies its element's unique identifier (ID). The value must be unique amongst all the IDs in the element's home subtree and must contain at least one character.

权谋诡计 2024-12-14 14:57:21

您可以使用:

baseElement.querySelector('#' + id)

它返回:

baseElement 的第一个与指定选择器组匹配的后代元素。


请参阅:

https://developer.mozilla.org/en- US/docs/Web/API/Element/querySelector

You can use:

baseElement.querySelector('#' + id)

It returns:

The first descendant element of baseElement which matches the specified group of selectors.


See:

https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文