【问题标题】:Traversing to specific children - jQuery/Javascript遍历特定子节点 - jQuery/Javascript
【发布时间】:2016-07-29 23:24:14
【问题描述】:

我有下面给出的以下 DOM 结构,我想在这两种情况下访问超链接按钮 (a)。我已将标题(header1 和 recordHeader1)都设为可点击(光标:指针)。因此,如果我单击 header1 中的任何地方(例如,如果我单击 headerTitle)或 recordHeader1 中的(名称,job_title),我想找到超链接按钮并执行某些单击功能。可能会有更多这样的场景,但在所有场景中,都有一个像下面给出的父标题,并且父标题总是在 DOM 中的某处具有超链接元素。请让我知道我在这里做错了什么。

场景 1:

<div class="header1">
  <a href="#" class="downArrow k-icon k-minus"></a> <!-- This element -->
  <img class="foundIcon" src="https://google.com">
  <div class="headerTitle">Contacts</div>
</div>

场景 2:

  <div class="recordNew">
      <div class="recordHeader1">
        <ul>
          <li>
            <div class="arrowContainer">
              <a href="#" class="downArrow k-icon k-minus"></a> <!-- This element -->
            </div>
          </li>
          <li>
            <div class="nameContainer">
              <span class="name">John Doe </span>
            </div>
          </li>
        </ul>
      </div>
      <span class="job-title">Marketing Professional </span>
      </div>
    </div>

我尝试了什么?

// This is a generic function that makes the header clickable based on any element click
function makeRowClickable() {
  $(".headerTitle, .name, .job_title, .foundIcon").on("click", function(e) {
    // doesn't seem to work and find the correct element
    console.log($(e.target).closest(".header1").find(".downArrow")); 
  });
}

【问题讨论】:

  • 第二个示例中没有 header1 类的元素,所以 .closest(".header1") 找不到任何东西
  • 是的,同意,这只是解释我想要实现的目标的一个例子。
  • 可点击框中是否总是只有一个链接?
  • 不@MichaelKunst,可能有很多,所以我不能只用'a'来定位它。然而,'a' 总是有一个名为“downArrow”的类,我在我的问题/示例中提到过。
  • .closest 只会找到与选择器匹配的最近的祖先,而不是兄弟姐妹、祖先兄弟姐妹或祖先兄弟姐妹的孩子

标签: javascript jquery html jquery-traversing


【解决方案1】:

试试这个

const headerClick = (e, header, downArrow) => {
  // programatically click on the anchor tag
  downArrow.click();
}

// get all .header1 elements
[...document.querySelectorAll('.header1')]

  // add all .recordHeader1 elements to the array
  .concat([...document.querySelectorAll('.recordHeader1')])

  // add event listener on each .header1 and .recordHeader1
  .forEach((header) => header.addEventListener('click', (e) => {

    // inside the click handler send the event, the header element, and its child downarrow element
    headerClick(e, header, header.querySelector('.downArrow'))

  }));

【讨论】:

  • 嗨丹尼尔,这会满足任何标题元素吗?我的标题元素并不总是 .header1。
  • 您只需要继续将选择器连接到您的数组中。 querySelector 会为你遍历 dom 树。
  • 嗨@Daniel_L,这确实有效,但是当我单击其他超链接元素时,它也会执行向下箭头单击。有没有办法避免这种情况?
  • “当我点击我的其他超链接元素时”是的...这是a 标签的默认行为,对吗?
  • 是的,但我不希望其他 a 标签执行此点击以及打开其他链接。我上面提到的应该执行此单击的元素可以是另一个 a 标签。那可能吗?上面的代码也无法在 IE 中运行 :(。它在 =&gt; 运算符上失败,说语法错误并且无法识别它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多