【问题标题】:Getting the inner-most row in the embedded tables获取嵌入表中最内层的行
【发布时间】:2016-10-09 03:25:42
【问题描述】:

我有一个带有嵌套表的表。问题是在鼠标事件侦听器中,我想抓取最深的行。我找到了this,这几乎就是我想要的,但我没有足够的经验来使用这个例子来解决我的问题。成功的关键是让警告框在下面给出的JSFIddle中显示“2”而不是“1”

<table>
  <tbody>
    <tr id='1'><td>A
      <table>
        <tbody>
          <td><tr id='2'>B</tr></td>
        </tbody>
      </table>
      </td>
    </tr>
  </tbody>
</table>

注意:为简单起见,我提出了两个级别,但想请您考虑一下一般情况,即任何级别的嵌入式结构都是可能的。

更新:查看 updated JSFiddle 更正了 NewToJS 的评论

【问题讨论】:

  • 你的tdtr放错了地方...&lt;td&gt;&lt;tr id='2'&gt;B&lt;/tr&gt;&lt;/td&gt;应该是&lt;tr id='2'&gt;&lt;td&gt;B&lt;/td&gt;&lt;/tr&gt;这将触发第一个TD的警报,因为鼠标事件仍在悬停第一个表到达第二个表。
  • 为什么你不使用:last选择器$("tr:last")?检查jsfiddle.net/k5Lko28r

标签: javascript jquery


【解决方案1】:

Event.stopPropagation() 在捕获和冒泡阶段阻止当前事件的进一步传播。

$(function() {
  $(document).on('mouseover', 'tr', function(e) {
    e.stopPropagation();
    console.log(this.id);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<table>
  <tbody>
    <tr id='1'>
      <td>A
        <table>
          <tbody>
            <tr id='2'>
              <td>B</td>
            </tr>
            <tr id='3'>
              <td>C</td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
  </tbody>
</table>

【讨论】:

  • Rayon,您的解决方案非常适合双层结构的情况。正如我在问题中提到的,我正在寻找一般案例解决方案
  • @EdgarNavasardyan — 这些是问题中应该提到的内容。您拥有的用例完全不同,因此规范必须准确。无论您想要最后一张表的第一行 ID 还是最后一张表最后一行 ID 等等..
  • Rayon,编辑您对此var elem = $(this).find('tr:hover').length ? $(this).find('tr:hover:last') : $(this); 的答案,我很可能会将其标记为解决方案
  • @EdgarNavasardyan this 你想要什么?
  • 哇!将此作为答案发布
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 2020-12-11
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2018-06-12
相关资源
最近更新 更多