如何使用JQuery获取父母的兄弟文本

时间:2015-06-16 17:29:03

标签: javascript jquery web-analytics dom-traversal jquery-traversing

我试图在另一个链接(父母的兄弟姐妹)之前直接获取链接的文本,但我一直得到"未定义。"我无法弄清楚我需要改变什么来获取锚标记的文本而不是"未定义"

这是我的HTML:

<li class="dropdown extra-class-a extra-class-b">
  <a class="level-1 extra-class1 extra-class2" href="#">Home Menu 1</a>
  <ul class="someclass" >
      <li class="some-class3"></li>
      <li class="no-subcat last" data-moburl="#" data-cgid="other-text">
          <a class="level-2" href="#"> Shop Text </a>
      </li>
  </ul>
</li>

这是我的脚本。请注意,我将此添加到Adobe DTM作为onclick事件,因此我实际上不确定如何使用console.log调试它。如果有人也可以解释如何做到这一点,那将会有所帮助。

这是基于Cory的建议,但在最后一行,我期待主菜单1&gt;商店文字我得&gt;商店文字 (即&#39; par&#39;的值为空

var $x = $(this);

//get parent link element (i.e., HN1 value)
var par = $x.closest('[class*="dropdown"]').find('a[class^="level-1"]').text(); ; 
//get value of link clicked
var clicked = $x.text(); 

//expecting "home menu 1>shop text"
//currently returns ">shop text"
var finalValue = par + '>' + clicked; 

1 个答案:

答案 0 :(得分:1)

jQuery库功能可通过函数$jQuery访问,您似乎已从代码中省略了该函数。

  • (x)的实例替换为$(x)jQuery(x)
  • this替换为$(this)jQuery(this)

上述任何一个的结果都是一个正确包装的jQuery元素,使您可以访问closest()prev()以及您尝试在代码中使用的其他jQuery函数。

在jQuery-land中,命名变量是有帮助的,所以你知道它们被包装了。其余的,我将使用上面的第二个选项,因此我将更改x的名称。您的固定代码可能类似于:

var $x = $(this);

var par = $x.closest('[class*="dropdown"]')
    .find('[class^="level-1"]')
    .text(); 
      // ^^ function, not a property  

// get text of link clicked - this works!
var clicked = $x.text();
                  // ^^ function, not a property

   var finalValue = par + '>' + clicked;
// ^^^ don't forget to declare variables with var