如何只获取<li>文本而不从li中的其他元素获取文本

时间:2017-08-11 09:00:39

标签: javascript jquery html list css-position

我有一个ul列表,其中li位于lidiv文本和same位于其中。 li课程已分配到div,而li则分配了不同的课程名称。

我只想从div而不是$("ul li").on('click', function() { $("span").text($(this).text()); });获取文字。 这是片段:

&#13;
&#13;
ul {
  position: relative
}
div {
  position: absolute;
  right: 0px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class='same'>Text1
    <div class='notsame'>Other text</div>
  </li>
  <li class='same'>Text2
    <div class='notsame'>Other text</div>
  </li>
  <li class='same'>Text3
    <div class='notsame'>Other text</div>
  </li>
  </ul>
  <span> </span>
&#13;
SIMAccountInfo accountInfo =message.getHeaders().get("accountInfo");
stateMachine.getExtendedState().getVariables().put("acc", accountInfo);
&#13;
&#13;
&#13;

我得到了O / P,而div里面的文字也是如何避免的?

3 个答案:

答案 0 :(得分:5)

li过滤掉文本节点 - 请参阅下面的演示:

$("ul li").on('click', function() {
  $("span").text($(this).contents().filter(function(){
      return this.nodeType == 3; // select text nodes
  }).text()); // paste all of them to the span
});
ul {
  position: relative
}

div {
  position: absolute;
  right: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class='same'>Text1
    <div class='notsame'>Other text</div>
  </li>
  <li class='same'>Text2
    <div class='notsame'>Other text</div> and more
  </li>
  <li class='same'>Text3
    <div class='notsame'>Other text</div>
  </li>
  </ul>
    <span> </span>

答案 1 :(得分:1)

使用$(this).clone()。children()。remove()。end()。text()获取外部元素的文本

&#13;
&#13;
$("ul li").on('click', function() {
  $("span").text($(this).clone().children().remove().end().text());
});
&#13;
ul {
  position: relative
}

div {
  position: absolute;
  right: 0px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class='same'>Text1
    <div class='notsame'>Other text</div>
  </li>
  <li class='same'>Text2
    <div class='notsame'>Other text</div>
  </li>
  <li class='same'>Text3
    <div class='notsame'>Other text</div>
  </li>
  <ul>
    <span> </span>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我首选的解决方案是在内存中创建元素的克隆,并在读取内容之前将其删除。

在你的情况下:

$( "ul li" ).on( 'click' , function() {

   $( "span" ).text( $(this).clone().children().remove().end().text() );

});

我推荐这种解决方案,因为它是单行的。