如何使用JQuery从相对元素中获取html文本?

时间:2016-04-27 03:26:20

标签: javascript jquery html tree parent

所以我试图在HTML标签中获取特定文本,该标签是它的亲戚。问题是我有多个家长,这意味着我有多个电话和不同的文本。

举个例子:

    <parent>
       <child>
           <grandchild class="wanted">Text</grandchild>
           <grandchild></grandchild>
       </child>
       <child>
           <grandchild></grandchild>
           <grandchild></grandchild>
       </child>
       <child>
           <grandchild class="calling"></grandchild>
           <grandchild></grandchild>
       </child>
   </parent>

我的剧本

    $(document).ready(function(){
    $(".calling").click(function(){
       var message = $(this).parent().siblings(".wanted").html();
    });
});

问题在于我无法得到Text,而且我不知道是否需要解析,即使我已经尝试过了。 我希望你能帮助我。

6 个答案:

答案 0 :(得分:1)

您可以.closest()使用选择器"parent".find()使用选择器".wanted"

$(document).ready(function() {
  $(".calling").click(function() {
    var message = $(this).closest("parent").find(".wanted").html();
    console.log(message)
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<parent>
  <child>
    <grandchild class="wanted">Text</grandchild>
    <grandchild></grandchild>
  </child>
  <child>
    <grandchild></grandchild>
    <grandchild></grandchild>
  </child>
  <child>
    <grandchild class="calling">click</grandchild>
    <grandchild></grandchild>
  </child>
</parent>

答案 1 :(得分:0)

您可以使用on()附加事件处理程序,例如:

$("body").on("click", ".calling", function(){
    // traverse several steps up to the parent, then back down to desired element.
    var message = $(this).parents("parent").find(".wanted").text();
});

来自文档:

  

.parents().parent()方法类似,只是后者只在DOM树上运行一个级别。

答案 2 :(得分:0)

<parent>
       <child> // Child 1
           <grandchild class="wanted">Text</grandchild> // grandChild1
           <grandchild></grandchild>
       </child>
       <child> // Child 2
           <grandchild></grandchild>   // grandChild2
           <grandchild></grandchild>   // // grandChild3
       </child>
       <child> // Child 3
           <grandchild class="calling"></grandchild>   // grandChild4
           <grandchild></grandchild>   // grandChild5
       </child>
   </parent>

如果只使用calling$('grandChild.wanted').text(),只需点击grandChild4即可在grandChild1中获取文字。

如果有多个标签具有相同的.wanted,则必须使用.each&amp; $(this).text()获取标记的文本内容

如果有多个.calling类,那么

$('.calling').on('click',function(event){
  $(this).closest('parent').find('.wanted').text().trim()
})

closest()将始终在DOM树中向上移动并与第一个匹配的元素匹配。 trim用于删除任何空格

答案 3 :(得分:0)

  

问题是我无法获得想要的文本,而且我不知道我是否   必须解析或不解析,即使我已经尝试过。我希望你可以   帮助我。

这是因为你正在做var message = $(this).parent().siblings(".wanted").html();

$(this) - &gt; calling班(孙子)

$(this).parent() -> <child></child>(3rd one)

$(this).parent().siblings()会提供其他<child>个元素(第1个和第2个)

因此你应该做$(this).parent().siblings().find('.wanted'),以便它可以在兄弟姐妹(<child>)内找到孙子。

答案 4 :(得分:0)

正如@ Nikhilesh-k-v发布的那样,它一直给我三个不同孩子的价值,所以我不得不指定一点点。谢谢大家,感谢所有评论。

答案 5 :(得分:0)

有很多方法可以解决这个问题:查看所有这些

console.clear();
$(document).ready(function() {
  $(".calling").on('click', function() {
    var messages = {};
    messages.message0 = $(this).parents('parent').find(".wanted").html();
    // or
    messages.message1 = $(this).parent().parent().find(".wanted").html();
    messages.message2 = $(this).parent('child').siblings().find(".wanted").html();
    messages.message3 = $(this).parent('child').siblings().find(".wanted").text();
    messages.message4 = $(this).parentsUntil('parent').siblings().find(".wanted").html();
    messages.message5 = $('parent').find(".wanted").html(); // if only ONE parent
    messages.message6 = $('parent').find("grandchild.wanted").text(); // if only ONE parent and in grandchild element
    messages.message7 = $('parent').find(".wanted").text(); // if only ONE parent
    messages.message8 = $('parent').find(".wanted").first().text(); // if first ONE present if many
    messages.message9 = $('body').find(".wanted").first().text(); // not recommended but...
    messages.message10 = $('body').find(".wanted").first().text(); // not recommended but...
    messages.message11 = $('parent').find(".wanted").first().text(); // not recommended but...
    messages.message12 = $('parent').find('child').find('grandchild').filter(".wanted").text(); // not recommended but...
    messages.message13 = $('grandchild.wanted').text(); // all of them...
    messages.message14 = $('grandchild.wanted').eq(0).text(); // first of them...
    messages.message15 = $('grandchild.wanted:first()').text(); // first of them...
    console.dir(messages);
  }).trigger('click');
});