JS创建带通配符的数组

JS creating array with wildcards

所以我有一个 HTML 网格,其中每个框都使用以下约定进行标记。每个盒子都有一个标记为 row_column 的 ID。我想创建一个扫描文档的方法,returns 是一个仅包含具有特定列号的框的数组。例如,如果我调用下面的函数,它应该 return 一个框数组,如果我用数字 2 调用它,它将 return (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>

亚历克斯

您可以使用 .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>

简单地说,您需要做的就是找到所有具有列号的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/