Подтвердить что ты не робот

Как получить все элементы внутри "div", которые начинаются с известного текста

У меня есть элемент div в документе HTML.

Я хотел бы извлечь все элементы внутри этого div с атрибутами id, начиная с известной строки (например, "q17 _" ).

Как я могу достичь этого с помощью JavaScript?

Если необходимо, для простоты я могу предположить, что все элементы внутри div имеют тип input или select.

4b9b3361

Ответ 1

var matches = [];
var searchEles = document.getElementById("myDiv").children;
for(var i = 0; i < searchEles.length; i++) {
    if(searchEles[i].tagName == 'SELECT' || searchEles.tagName == 'INPUT') {
        if(searchEles[i].id.indexOf('q1_') == 0) {
            matches.push(searchEles[i]);
        }
    }
}

Еще раз, я настоятельно рекомендую jQuery для таких задач:

$("#myDiv :input").hide(); // :input matches all input elements, including selects

Ответ 2

Вариант 1: Вероятно самый быстрый (но не поддерживается некоторые браузеры, если используется в документе или SVGElement):

var elements = document.getElementById('parentContainer').children;

Вариант 2: Вероятнее всего медленнее:

var elements = document.getElementById('parentContainer').getElementsByTagName('*');

Вариант 3: Требуется изменить код (оберните форму вместо div вокруг нее):

// Since what you're doing looks like it should be in a form...
var elements = document.forms['parentContainer'].elements;

var matches = [];

for (var i = 0; i < elements.length; i++)
    if (elements[i].value.indexOf('q17_') == 0)
        matches.push(elements[i]);

Ответ 3

Предполагая, что каждая новая ветка в вашем дереве является div, я реализовал это решение с помощью двух функций:

function fillArray(vector1,vector2){
    for (var i = 0; i < vector1.length; i++){
        if (vector1[i].id.indexOf('q17_') == 0)
            vector2.push(vector1[i]);
        if(vector1[i].tagName == 'DIV')
            fillArray (document.getElementById(vector1[i].id).children,vector2);
    }
}

function selectAllElementsInsideDiv(divId){ 
    var matches = new Array();
    var searchEles = document.getElementById(divId).children;
    fillArray(searchEles,matches);
    return matches;
}

Теперь, полагая, что ваш идентификатор div является "myDiv", вам нужно только создать элемент массива и установить его значение для функции return:

var ElementsInsideMyDiv = new Array();
ElementsInsideMyDiv =  selectAllElementsInsideDiv('myDiv')

Я тестировал его, и это сработало для меня. Надеюсь, это поможет вам.

Ответ 4

var $list = $('#divname input[id^="q17_"]');   // get all input controls with id q17_

// once you have $list you can do whatever you want

var ControlCnt = $list.length;
// Now loop through list of controls
$list.each( function() {

    var id = $(this).prop("id");      // get id
    var cbx = '';
    if ($(this).is(':checkbox') || $(this).is(':radio')) {
        // Need to see if this control is checked
    }
    else { 
        // Nope, not a checked control - so do something else
    }

});

Ответ 5

С современными браузерами это легко без jQuery:

document.getElementById('yourParentDiv').querySelectorAll('[id^="q17_"]');

ЗапросSelectorAll принимает селектор (как и селекторы CSS) и использует его для рекурсивного поиска дочерних элементов элемента yourParentDiv. Селектор использует ^=, что означает "начинается с".

Обратите внимание, что все браузеры, выпущенные с июня 2009 года, поддерживают это.

Ответ 6

Я протестировал образец, и я хотел бы поделиться этим образцом, и я уверен, что он вполне помогает. Я сделал все в теле, сначала создав там структуру, нажав кнопку, которую вы назовете функция selectallelement(); на клике мыши, который передаст идентификатор этого div, о котором вы хотите узнать о детях. Я дал предупреждения здесь на разных уровнях, поэтому вы можете проверить, где r u теперь в кодировке.

    <body>
    <h1>javascript to count the number of children of given child</h1>

    <div id="count">
    <span>a</span>
    <span>s</span>
    <span>d</span>
    <span>ff</span>
    <div>fsds</div>
    <p>fffff</p>
    </div>
   <button type="button" onclick="selectallelement('count')">click</button>
   <p>total element no.</p>
    <p id="sho">here</p>
  <script>

  function selectallelement(divid)
  {
 alert(divid);
 var ele = document.getElementById(divid).children;
 var match = new Array();
  var i = fillArray(ele,match);
  alert(i);
   document.getElementById('sho').innerHTML = i;
  }
 function fillArray(e1,a1)
  {
 alert("we are here");
   for(var i =0;i<e1.length;i++)
{
  if(e1[i].id.indexOf('count') == 0)
    a1.push(e1[i]);
}
return i;
   }
   </script>

 </body>

  USE THIS I AM SURE U WILL GET YOUR ANSWER ...THANKS