Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将所有元素放入“内部”;分区;从一个已知的文本开始_Javascript_Html - Fatal编程技术网

Javascript 如何将所有元素放入“内部”;分区;从一个已知的文本开始

Javascript 如何将所有元素放入“内部”;分区;从一个已知的文本开始,javascript,html,Javascript,Html,我在HTML文档中有一个div元素 我想提取此div中的所有元素,其id属性以已知字符串开头(例如“q17”) 如何使用JavaScript实现这一点 如果需要,为了简单起见,我可以假设div中的所有元素都属于input或select选项1:可能最快(但如果在文档或SVGElement上使用,则不支持): var matches = []; var searchEles = document.getElementById("myDiv").children; for(var i = 0; i &

我在HTML文档中有一个
div
元素

我想提取此
div
中的所有元素,其
id
属性以已知字符串开头(例如“q17”)

如何使用JavaScript实现这一点


如果需要,为了简单起见,我可以假设
div
中的所有元素都属于
input
select

选项1:可能最快(但如果在文档或SVGElement上使用,则不支持):

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]);
        }
    }
}
选项2:可能最慢:

var elements = document.getElementById('parentContainer').getElementsByTagName('*');
选项3:需要更改代码(将表单而不是div包装在其周围):

//因为您所做的看起来应该是一种形式。。。
var elements=document.forms['parentContainer'].elements;
var匹配=[];
对于(var i=0;i
假设树中的每个新分支都是一个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;
}

我已经测试过了,它对我有效。我希望它能对您有所帮助。

我已经测试了一个样本,我想与大家分享这个样本,我相信它对您的帮助很大。
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
    }

});
我已经在身体里做了所有的事情,首先在那个里创建一个结构,点击按钮你们将调用一个 函数选择等位基因();单击鼠标,它将传递您想了解孩子们的那个div的id。 我在这里给出了不同级别的警报,以便您可以测试RU现在在编码中的位置

    <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 

javascript来计算给定子对象的子对象数
A.
s
D
ff
消防处
fffff

点击 元素总数

这里

功能选择等位基因(divid) { 警报(divid); var ele=document.getElementById(divid).children; var match=新数组(); var i=填充数组(ele,match); 警报(一); document.getElementById('sho').innerHTML=i; } 函数填充数组(e1,a1) { 警惕(“我们在这里”);
对于使用现代浏览器的(var i=0;i),不使用jQuery很容易:

document.getElementById('yourParentDiv').querySelectorAll('id^=“q17_']);
querySelectorAll接受一个选择器(根据CSS选择器)并使用它递归搜索“yourParentDiv”元素的子元素。选择器使用
^=
,意思是“以开头”


请注意,自2009年6月以来发布的所有浏览器都支持这一点。

可能的重复我想知道如何在JavaScript中实现这一点。我认为这是一个不同的问题,这就是为什么我打开了一个新的thread.document.getElementsByTagName(“div”)将返回文档中的所有div。我不需要这个。我已经在一个变量中有了div。我需要在这个div中找到id以“q17”开头的所有元素,例如。@misha moroshki-你是说名称属性以给定值开头吗?对不起,我是说“id”将来我可能会使用jQuery,但现在我需要用JavaScript来实现这一点。代码的问题是“children”只是myDiv的子对象。在我的例子中,输入和选择可以深入到div内部,而不是直接子对象。@misha moroshko-现在我们讨论的是递归,我强烈建议使用jQuery,如上所述:):)那么你说的是如果我想在JavaScript中实现这一点,我必须编写一个递归函数?在JavaScript中没有其他选择??如果你知道标记的外观,就不需要递归-因为可以编写特定于DOM的代码来提取所需的内容。我建议你发布它,以获得更好的响应。你能不能将jQuery简单化一点。我还希望将所有元素放入一个数组中。同样,我需要在树的深处收集所有元素,而不仅仅是子元素。
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;
}
var ElementsInsideMyDiv = new Array();
ElementsInsideMyDiv =  selectAllElementsInsideDiv('myDiv')
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
    }

});
    <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