【问题标题】:Use javascript to find an html element which exists in an array of elements from the element's event使用 javascript 从元素的事件中查找存在于元素数组中的 html 元素
【发布时间】:2025-11-26 13:55:02
【问题描述】:

我有一个由 javascript 生成的表。在创建表格的 tbody 时,我将每个单元格的每个元素存储在一个数组中。任何元素都可以通过

轻松定位
let element = elements[r][c];

其中 r 和 c 是 tbody 的行和列。

当单元格上发生事件时,例如keyup,我捕获该事件并使用event.target 检索触发事件的元素。

event_element = event.target;

现在有没有办法找出数组elements 中的哪个元素是event_element

目前我正在设置 element.name = element_rXcX 然后解析 event.target.name 以查找 rc 的值以恢复数组中的实际元素。

这也允许我在表格中为元素的事件找到单元格的行和列。

我假设在元素数组中定位一个元素会更好,它可能会让我有一个理解 DOM 的机会。

请记住元素 html 可能通常是相同的,但是我通过 chrome javascript 控制台注意到,如果我记录一个元素并在控制台中单击它,它将突出显示表格中的正确单元格。

这让我相信我必须能够在我的元素数组中查找元素。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你可以像这样嵌套Array.find

    var arr = []
    arr[0] = ["00", "01"];
    arr[1] = ["10", "11"];
    arr[2] = ["20", "21"];
    
    function find(arr, element) {
      var col;
      var row;
      var tmpArr = arr.find(function(subArr){
        col = subArr.indexOf(element);
        return col > -1;
      });
      row = arr.indexOf(tmpArr);
      return [row, col];
    }
    
    console.log(find(arr, "21")); // [2,1]

    请记住,IE 不支持 array.find,因此您需要为其添加一个 polyfill。

    【讨论】:

    • 我想我对 DOM 感到困惑 - 当我记录它显示为字符串的元素时,它看起来像一个对象,但它看起来像一个对象。搜索一个字符串会产生多个可能的结果。
    • 在这种情况下,您可以在创建元素并在其中存储数组坐标时使用data- 属性,如下所示:data-row=1 data-column=4
    • 我只是在想......而且我还在想我确实需要为每个元素编写一个唯一的 id 才能在二维数组中找到它。那时我还不如坚持解析 id 或 name,它最终会减少代码
    • 我的印象是您将实际元素存储在数组中,而不是字符串?在这种情况下,搜索数组应该可以工作。当使用我回答中的函数时,只需将event.target(或currentTarget)作为第二个参数而不是字符串传递。
    • 是的,这完全有效....所以对于所有搜索该死的 tbody 表格行的人来说,跟踪元素然后将元素放在上面的代码中实际上有效....没有委托或最接近等等……
    【解决方案2】:

    你可以试试:

    event_element.cellIndexevent_element.parentNode.rowIndex

    cellIndex 属性返回一个单元格在表格行的单元格集合中的位置。 http://www.w3schools.com/jsref/prop_tabledata_cellindex.asp

    rowIndex 属性返回行在表的行集合中的位置。 http://www.w3schools.com/jsref/prop_tablerow_rowindex.asp

    【讨论】:

    • 对于父节点的行没有保证。我有一张支票让我知道我是否需要 parentNode 或 parentNode.parentNode。
    • 但是我有元素,并且我有一个元素数组。问题是我可以吗,如果可以,我如何在元素数组中定位元素?
    • 在数组中定位元素是什么意思?元素[event_element.parentNode.rowIndex][event_element.cellIndex] 不起作用?
    • 输入需要上两个父节点,textNode 上一个。然后你必须找到头上的行数,这对我来说也是可变的。这使得解析元素名称的代码更少,更准确。但是,我有元素,并且我有元素数组。我想知道我是否可以使用*.com/questions/10505284/…