нужен совет по использованию getElementsByTagName - PullRequest
0 голосов
/ 12 октября 2011

Может ли кто-нибудь объяснить мне более подробно о getElementsByTagName и, в частности, как правильно перебрать список узлов, возвращаемый getElementsByTagName.

Вот мой простой скрипт, в котором я хочу отобразить выбранный индекс в окне предупреждения, но с использованием getElementsByTagName. Я знаю, что может быть не очень хорошим решением использовать getElementsByTagName для получения значения выбранного параметра, но все же я хотел бы использовать getElementsByTagName, поскольку это может помочь мне лучше понять, как это работает

<script language="JavaScript">
<!--
   function process(){
     var a = document.getElementById('mySelect');
     var res = a.options[a.selectedIndex].text;

     alert(res);
   }
//-->
</script>

А вот HTML-фрагмент:

<body>
<select name=""id="mySelect" onchange="process()">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
</select>

Итак, мой вопрос:

Может кто-нибудь сказать мне, как заставить этот скрипт работать, используя getElementsByTagName вместо getElementById?

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Использование getElementById для получения select и getElementsByTagName для чтения опций

function process(){
    var sel = document.getElementById("mySelect");
    var opts = sel.getElementsByTagName("option");
    for(var i=0;i<opts.length;i++){
        if(opts[i].selected){
             alert(opts[i].innerHTML);
             break;
        }
    }
}

Пример

Использование getElementsByTagName для получения выбора и getElementsByTagName для получения опций

function process(){
    var sels = document.getElementsByTagName("select");
    for(var i=0; i<sels.length;i++){
        var opts = sels[i].getElementsByTagName("option");
        for(var j=0;j<opts.length;j++){
            if(opts[j].selected){
                 alert(opts[j].innerHTML);
                 break;
            }
        }
    }
}

Использование имени getElementsByTag для получения объекта выбора и параметров

function process(){
    var sels = document.getElementsByTagName("select");
    for(var i=0; i<sels.length;i++){
        var sel = sels[i];
        alert( sel.options[sel.selectedIndex].text );
    }
}
0 голосов
/ 12 октября 2011

getElementById возвращает один элемент, потому что идентификаторы должны быть уникальными, поэтому должен быть только один элемент для возврата, если данный идентификатор существует.

getElementsByTagName возвращает объект NodeList со всеми элементами с данным именем тега.

 <script language="JavaScript">
<!--
   function process(){
     var a = document.getElementsByTagName('select');
     var res = a[0].options[a[0].selectedIndex].text;

     alert(res);
   }
//-->
</script>
...