jQuery if和$(this)混淆

时间:2014-05-08 15:54:24

标签: javascript jquery

一直困扰我一段时间的东西。

的JavaScript

$('.video-tab-container ul li a').click(function(e) {
    var thisClass = $(this).attr('class');
    console.log(thisClass);
    if ( $('.video-container .video').is('.' + thisClass) ) {
        $(this).addClass('test');
      }
    e.preventDefault();
});

HTML

<div class="video-tab-container clearfix">
    <ul>
        <li><a class="chinese" href="#">Chinese</a></li>
        <li><a class="thai" href="#">Thai</a></li>
        <li><a class="english" href="#">English</a></li>
    </ul>
</div>
<div class="video-container">
    <div class="video chinese"></div>
    <div class="video thai"></div>
    <div class="video english"></div>
</div>

在if语句中,如何在if语句中创建$(this)元素?那么,如果语句为真,那么类test会被添加到具有相应类的.video中吗?也许我这样做是错的。

4 个答案:

答案 0 :(得分:2)

您需要使用:

$(this).closest('.video-tab-container').next()
       .find('.video.' + thisClass).addClass('test')
       .siblings('.video').removeClass('test');

而不是:

$(this).addClass('test');

因为当前$(this)被视为您点击的锚点。

<强> Fiddle Demo

答案 1 :(得分:1)

this的引用不会因为它在if语句中而改变。 如果您希望引用this来更改语句,则需要这样写:

$('.video-tab-container ul li a').click(function(e) {
    var thisClass = $(this).attr('class');
    console.log(thisClass);

    $('.video-container .video').each(function(){
      var $this = $(this);
      if ($this.is('.' + thisClass) ) {
        $this.addClass('test');
      }
    })

    e.preventDefault();
});

答案 2 :(得分:1)

我认为用这个替换你的if语句:

$('.video-container .video.' + thisClass).addClass('test');

会做你想做的事情。就像上面提到的评论者一样,&#34; if&#34;声明并没有改变&#34;这个&#34;是指。

答案 3 :(得分:0)

$('.video-tab-container ul li a').click(function(e) {
    var thisClass, video;
    thisClass = $(this).attr('class');
    console.log(thisClass);
    if ((video = $('.video-container .video.' + thisClass)).length !== 0) {
        $(video).addClass('test');
    }
    e.preventDefault();
});