Jquery选择器 - 这与vs id和class

时间:2013-10-10 21:44:45

标签: jquery html jquery-selectors this

我有一个外部div,当我将鼠标悬停在它上面时,我希望第二个子元素在jquery中切换一个类。我相信我的代码很接近,我认为我遇到的问题与我选择的问题有关,而不是正确的选择器,因为我不完全理解id,class或this之间的区别。谢谢你的帮助! (我不能只将它们全部分配给一个类,因为这个代码会有多个块)

<script>
function color_toggle(id){

     selection = $(this) + ' img:nth-child(2)';
     $( selection ).toggleClass("grey");
}
</script>



<div class="row-fluid supplier_new" onmouseover="color_toggle(this);" onmouseout="color_toggle(this);">
        <div class="span3 supplier_logo">
             <h4>APV Manufacturing</h4>
            <img class="grey" src = "img/suppliers/55555/logo.png" />
        </div>

        <div class="span1" style="padding-left:15px;">
            <img class="grey" src="http://aerofied.com/sites/all/themes/aerofied/css/images/icon-verified.png">
            <br><br>
            <img class="grey" src="http://aerofied.com/sites/all/themes/aerofied/css/images/icon-preferred.png">
        </div>
    </div>

3 个答案:

答案 0 :(得分:4)

由于您将this作为id参数传递给函数,因此您需要$(id)

但是你可以这样称呼它:

onmouseover="color_toggle($(this))"

只需使用id.find("img:eq(2)").toggleClass("gray")

即可

或者你可以这样做:

onmouseover="color_toggle.call(this);"

你的JS:

function color_toggle() {
    $(this).find("img:eq(2)").toggleClass("gray");
}

或者你可以使用CSS:

.someclass:hover img:nth-child(2) {
    /* apply style here */
}

答案 1 :(得分:1)

一些事情:

(1)向代码中的<img>元素添加了ID属性(它们缺失)

(2)删除了内联javascript,在脚本标签中使用了jQuery(总是最好这样做)

(3)修正了jQuery选择器:

$(this).find('img:eq(2)').attr('id');  // <-- But the ID attr has to EXIST

jsFiddle Demo

在上面的jsFiddle演示中,当您将鼠标悬停在DIV上时,您将看到第三张图像周围的背景开启/关闭。

以下是代码:

<script type="text/javascript">
    $(document).ready(function() {
        $('.row-fluid').hover(
            function() {
                hovIn($(this));
            }, 
            function() {
                hovOut($(this));
            }
        );

        function hovIn($this){
            //$this.css({'background':'wheat'});
            var myId = $this.find('img:eq(2)').attr('id');
            color_toggle( myId );
        }
        function hovOut($this){
            //$this.css({'background':'white'});
            var myId = $this.find('img:eq(2)').attr('id');
            color_toggle( myId );
        }
        function color_toggle(id) {
            $('#'+id).toggleClass("grey");
        }

    }); //END document.ready
</script>

由于我们使用的是jQuery,请确保引用jQuery库(通常位于页面顶部的<head>标记中):

<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>

注:

您应该打印/记忆this list of jQuery selectors and events。点击Next Chapter六次,您将遍历所有页面。

答案 2 :(得分:1)

我刚刚更新了一个答案,请查看此处的更新

https://stackoverflow.com/a/19227334/1743214

所以我将解释这个,以及何时使用它。 这就像指着什么......

  • 你不能指出那些不存在的东西。或者刚出去。
  • 它必须是另一个明智的你是doing_it_wrong()

我何时使用this

我将在这里介绍基本情况(所以这不是完整的答案)。 在元素上应用函数时使用this

所以我要说我隐藏了一个元素。

$('#header').hide(5000 , function(){
    $(this) //in this case im pointing at header . because it is the element i have selected . 
})

为什么要使用它,让我们再次使用id?!

它可以在上一个示例中使用,但请看一下

<ul>
    <li class="someone" > me <li>
    <li class="someone" > you <li>
    <li class="someone" > he <li>
</ul>

$.each($('.someone'), function(){
    $('.someone') // this will jsut select all the 3 elements again
    $(this) // will get the current element that we are looping though
    // if i do
    console.log($(this).text()) // this will log me then you  then he
})

深入了解this,谷歌主题或阅读一些书籍。