J'ai rencontré un problème lors de la pratique du HTML. Quand j'ai utilisé parentNode en JavaScript, je pensais que ce n'était pas difficile à traiter.

Mais pour obtenir un élément sous parentNode en utilisant getElementById ou une autre fonction ne fonctionne pas comme ma pensée.

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

Ça ne fonctionne pas. Je ne comprends pas ...

<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>
4
Jeff Gu Kang 2 oct. 2011 à 11:46

3 réponses

Meilleure réponse

Vous avez deux éléments avec le même attribut id mais les attributs id doivent être uniques:

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

Lorsque vous dupliquez des attributs id, des choses étranges se produisent. Si vous modifiez le <textarea> pour avoir id="question_text", par exemple, les choses commencent à mieux fonctionner:

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

À partir de la spécification HTML4:

id = nom [CS]
Cet attribut attribue un nom à un élément. Ce nom doit être unique dans un document.

Et à partir de la spécification HTML5:

L'attribut id spécifie l'identifiant unique (ID) de son élément. La valeur doit être unique parmi tous les ID de la sous-arborescence d'origine de l'élément et doit contenir au moins un caractère.

2
mu is too short 2 oct. 2011 à 07:57

Vous pouvez utiliser:

baseElement.querySelector('#' + id)

Il renvoie:

Le premier élément descendant de baseElement qui correspond au groupe de sélecteurs spécifié.


Voir:

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

0
Mir-Ismaili 8 mai 2019 à 21:32

GetElementById () est une méthode de documents, non disponible dans les éléments.

Vous pouvez utiliser:

this_question.getElementsByTagName('textarea')[0]

GetElementsByTagName () est disponible dans les éléments.

7
Dr.Molle 2 oct. 2011 à 08:13