JS使用通配符创建数组

时间:2017-02-04 16:43:03

标签: javascript arrays wildcard

所以我有一个HTML网格,其中每个框都使用以下约定进行标记。每个框都有一个标记为row_column的ID。我想创建一个方法来扫描文档并返回一个只包含具有特定列号的框的数组。例如,如果我调用下面的函数,它应该返回一个框数组,如果我用数字2调用它,将返回(1_2,2_2,3_2和4_2)。

  function getBoxesByColumn(columnNumber){
        return document.getElementById("?_" + columnNumber);
    }

从那里,我将使用该函数以这种方式在另一个函数中创建一个数组:

function test(){
    var boxes = getBoxesByColumn(1);
    console.log(boxes);

但是,当我调用控制台时,它只打印一个空值。那是为什么?

编辑:

我的HTML示例(包含2行)         

        <div id = "game_background">

        <!-- Row 1 --> 

        <div id = "row_1" class = "row">

            <div id = "1_1" class = "box_empty">
                <p class = "v"></p>
            </div>

            <div id = "1_2" class = "box_empty">
                <p class = "v"></p>
            </div>

            <div id = "1_3" class = "box_empty">
                <p class = "v"></p>
            </div>

            <div id = "1_4" class = "box_empty">
                <p class = "v"></p>
            </div> 

        </div>

        <!-- Row 2 --> 
        <div id = "row_2" class = "row">

            <div id = "2_1" class = "box_empty">
                <p class = "v"></p>
            </div>

            <div id = "2_2" class = "box_empty">
                <p class = "v"></p>
            </div>

            <div id = "2_3" class = "box_empty">
                <p class = "v"></p>
            </div>

            <div id = "2_4" class = "box_empty">
                <p class = "v"></p>
            </div>
        </div>

亚历

2 个答案:

答案 0 :(得分:5)

您可以使用.querySelectorAll(),属性以选择器,后代选择器>开头,属性以选择器结束

function getBoxesByColumn(columnNumber) {
  return document.querySelectorAll("div[id^=row] > div[id$='" + columnNumber + "']");
}

console.log(getBoxesByColumn(2))
<div id="game_background">

  <!-- Row 1 -->

  <div id="row_1" class="row">

    <div id="1_1" class="box_empty">
      <p class="v"></p>
    </div>

    <div id="1_2" class="box_empty">
      <p class="v"></p>
    </div>

    <div id="1_3" class="box_empty">
      <p class="v"></p>
    </div>

    <div id="1_4" class="box_empty">
      <p class="v"></p>
    </div>

  </div>

  <!-- Row 2 -->
  <div id="row_2" class="row">

    <div id="2_1" class="box_empty">
      <p class="v"></p>
    </div>

    <div id="2_2" class="box_empty">
      <p class="v"></p>
    </div>

    <div id="2_3" class="box_empty">
      <p class="v"></p>
    </div>

    <div id="2_4" class="box_empty">
      <p class="v"></p>
    </div>
  </div>

答案 1 :(得分:0)

简单地说,您需要做的是找到所有具有列号的id的div,然后迭代它们以找到您想要的给定数字。

function getBoxesByColumn(columnNumber){
    var elems = document.getElementsByTagName('div'); // Get all divs
    var arr = [];
    for(i in elems){ // Iterate all elems
        // Check if element contains the column number
        if(elems[i].id 
        && elems[i].id.indexOf(columnNumber) != -1 
        && elems[i].id.indexOf('row') == -1){
            arr.push(elems[i]) // Push the element to the arr
        }
    }
    return arr; // Return arr
}

https://jsfiddle.net/34v7v0pw/