为什么此event.target.previousElementSibling不起作用?

时间:2019-03-11 05:46:39

标签: javascript events target

我得到了这个代码

                    <div class="col-lg-12 video-meta">
                    <div class="container">
                        <span class="views"><i class="far fa-eye"></i>{{ Counter::show('post', $post->id) }}</span>

                        <span class="lnd">
                            <a class="like" href="#"><i class="far fa-thumbs-up"></i></a>
                            <a class="like" href="#"><i class="far fa-thumbs-down"></i></a>
                        </span>

并且我将其定位为

        $('.like').on('click', function(event) {
        event.preventDefault();
        var isLike = event.target.previousElementSibling == null;
        console.log(isLike);

,并且在两种情况下都返回“ true”,为什么?是否有一个原因?我已经连续使用了4个小时,并且可以正常工作了一次,我只是休息了一会儿,没有做任何改变,但是休息后它还是没工作?我认为这是个坏笑话。我在这里想念什么?

它基本上应该采用“ like”类,并且作为第一个标签没有null的previousSiblingElement,它应该返回true,但是第二个标签具有与同级标签相同的元素,并且仍返回true。

1 个答案:

答案 0 :(得分:2)

event.target<i>元素,因为这是真正发生点击的元素。

如果要使用<a>(在其上附加了事件处理程序),则需要请求event.currentTarget甚至只请求this

$('.like').on('click', function(event) {
  event.preventDefault();
  console.log(event.target); // <i>
  
  var isLike = event.currentTarget.previousElementSibling == null;
  console.log(isLike);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-lg-12 video-meta">
  <div class="container">
    <span class="lnd">
      <a class="like" href="#"><i class="far fa-thumbs-up">a</i></a>
      <a class="like" href="#"><i class="far fa-thumbs-down">b</i></a>
    </span>
  </div>
</div>