【问题标题】:How to get the children of the $(this) selector?如何获取 $(this) 选择器的孩子?
【发布时间】:2010-09-23 07:46:21
【问题描述】:

我有一个类似这样的布局:

<div id="..."><img src="..."></div>

并希望使用 jQuery 选择器在点击时选择 div 内的子 img

要获得div,我有这个选择器:

$(this)

如何使用选择器获取子 img

【问题讨论】:

    标签: javascript jquery jquery-selectors


    【解决方案1】:

    试试这个代码:

    $(this).children()[0]
    

    【讨论】:

    • @rémy:这甚至不是有效的语法。 (花了整整 2 年的时间让任何人注意到......)
    【解决方案2】:

    在不知道 DIV 的 ID 的情况下,我认为您可以像这样选择 IMG:

    $("#"+$(this).attr("id")+" img:first")
    

    【讨论】:

    • 这可能确实有效,但它有点像 Rube Goldberg 的回答 :)
    【解决方案3】:

    你也可以使用

    $(this).find('img');
    

    这将返回所有imgs,它们是div的后代

    【讨论】:

    • 一般情况下,$(this).children('img') 似乎会更好。例如&lt;div&gt;&lt;img src="..." /&gt;&lt;div&gt;&lt;img src="..." /&gt;&lt;/div&gt;&lt;/div&gt; 因为大概是用户想要找到 1st-level imgs。
    【解决方案4】:

    jQuery 构造函数接受名为context 的第二个参数,该参数可用于覆盖选择的上下文。

    jQuery("img", this);
    

    这与像这样使用.find() 相同:

    jQuery(this).find("img");
    

    如果你想要的imgs是only被点击元素的直接后代,你也可以使用.children()

    jQuery(this).children("img");
    

    【讨论】:

    • 对于它的价值: jQuery("img", this) 在内部转换为: jQuery(this).find("img") 所以第二个稍微快一点。 :)
    【解决方案5】:

    如果你的DIV标签后面紧跟着IMG标签,你也可以使用:

    $(this).next();
    

    【讨论】:

    • .next() 真的很脆弱,除非你总能保证元素会是下一个元素,否则最好使用不同的方法。在这种情况下,IMG 是 div 的后代,而不是兄弟。
    【解决方案6】:

    如果你需要得到第一个正好下降一级的img,你可以这样做

    $(this).children("img:first")
    

    【讨论】:

      【解决方案7】:

      直接子是

      $('> .child-class', this)
      

      【讨论】:

        【解决方案8】:

        您可以找到父 div 的所有 img 元素,如下所示

        $(this).find('img') or $(this).children('img')
        

        如果你想要一个特定的img 元素,你可以这样写

        $(this).children('img:nth(n)')  
        // where n is the child place in parent list start from 0 onwards
        

        您的 div 仅包含一个 img 元素。所以下面这个是对的

         $(this).find("img").attr("alt")
                          OR
          $(this).children("img").attr("alt")
        

        但如果您的 div 包含更多 img 元素,如下所示

        <div class="mydiv">
            <img src="test.png" alt="3">
            <img src="test.png" alt="4">
        </div>
        

        那么你不能使用上面的代码来查找第二个 img 元素的 alt 值。所以你可以试试这个:

         $(this).find("img:last-child").attr("alt")
                           OR
         $(this).children("img:last-child").attr("alt")
        

        此示例展示了如何在父对象中找到实际对象的一般概念。 您可以使用类来区分您孩子的对象。这既简单又有趣。即

        <div class="mydiv">
            <img class='first' src="test.png" alt="3">
            <img class='second' src="test.png" alt="4">
        </div>
        

        你可以这样做:

         $(this).find(".first").attr("alt")
        

        具体如下:

         $(this).find("img.first").attr("alt")
        

        您可以像上面的代码一样使用 find 或 children。如需更多信息,请访问儿童http://api.jquery.com/children/ 和查找http://api.jquery.com/find/。 见例子http://jsfiddle.net/lalitjs/Nx8a6/

        【讨论】:

          【解决方案9】:

          jQuery 的each 是一种选择:

          <div id="test">
              <img src="testing.png"/>
              <img src="testing1.png"/>
          </div>
          
          $('#test img').each(function(){
              console.log($(this).attr('src'));
          });
          

          【讨论】:

            【解决方案10】:

            您可以使用Child Selecor 来引用父级中可用的子元素。

            $(' > img', this).attr("src");
            

            下面是如果您没有引用 $(this) 并且您想在其他函数中引用 div 中可用的 img

             $('#divid > img').attr("src");
            

            【讨论】:

              【解决方案11】:

              在 jQuery 中引用子项的方法。我在下面的 jQuery 中总结了它:

              $(this).find("img"); // any img tag child or grandchild etc...   
              $(this).children("img"); //any img tag child that is direct descendant 
              $(this).find("img:first") //any img tag first child or first grandchild etc...
              $(this).children("img:first") //the first img tag  child that is direct descendant 
              $(this).children("img:nth-child(1)") //the img is first direct descendant child
              $(this).next(); //the img is first direct descendant child
              

              【讨论】:

                【解决方案12】:

                这也应该有效:

                $("#id img")
                

                【讨论】:

                  【解决方案13】:

                  您可以使用以下任一方法:

                  1 find():

                  $(this).find('img');
                  

                  2 个孩子():

                  $(this).children('img');
                  

                  【讨论】:

                    【解决方案14】:

                    这是一个功能代码,你可以运行它(这是一个简单的演示)。

                    当您单击 DIV 时,您会通过一些不同的方法获取图像,在这种情况下,“this”就是 DIV。

                    $(document).ready(function() {
                      // When you click the DIV, you take it with "this"
                      $('#my_div').click(function() {
                        console.info('Initializing the tests..');
                        console.log('Method #1: '+$(this).children('img'));
                        console.log('Method #2: '+$(this).find('img'));
                        // Here, i'm selecting the first ocorrence of <IMG>
                        console.log('Method #3: '+$(this).find('img:eq(0)'));
                      });
                    });
                    .the_div{
                      background-color: yellow;
                      width: 100%;
                      height: 200px;
                    }
                    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                    
                    <div id="my_div" class="the_div">
                      <img src="...">
                    </div>

                    希望对你有帮助!

                    【讨论】:

                      【解决方案15】:

                      $(document).ready(function() {
                        // When you click the DIV, you take it with "this"
                        $('#my_div').click(function() {
                          console.info('Initializing the tests..');
                          console.log('Method #1: '+$(this).children('img'));
                          console.log('Method #2: '+$(this).find('img'));
                          // Here, i'm selecting the first ocorrence of <IMG>
                          console.log('Method #3: '+$(this).find('img:eq(0)'));
                        });
                      });
                      .the_div{
                        background-color: yellow;
                        width: 100%;
                        height: 200px;
                      }
                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                      
                      <div id="my_div" class="the_div">
                        <img src="...">
                      </div>

                      【讨论】:

                        【解决方案16】:

                        &lt;div&gt; 中可能有 0 到多个 &lt;img&gt; 标签。

                        要查找元素,请使用.find()

                        为确保您的代码安全,请使用.each()

                        同时使用 .find().each() 可以防止在 0 个 &lt;img&gt; 元素的情况下出现空引用错误,同时还允许处理多个 &lt;img&gt; 元素。

                        // Set the click handler on your div
                        $("body").off("click", "#mydiv").on("click", "#mydiv", function() {
                        
                          // Find the image using.find() and .each()
                          $(this).find("img").each(function() {
                          
                                var img = this;  // "this" is, now, scoped to the image element
                                
                                // Do something with the image
                                $(this).animate({
                                  width: ($(this).width() > 100 ? 100 : $(this).width() + 100) + "px"
                                }, 500);
                                
                          });
                          
                        });
                        #mydiv {
                          text-align: center;
                          vertical-align: middle;
                          background-color: #000000;
                          cursor: pointer;
                          padding: 50px;
                          
                        }
                        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
                        
                        <div id="mydiv">
                          <img src="" width="100" height="100"/>
                        </div>

                        【讨论】:

                          【解决方案17】:

                          你可以使用

                              <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
                           $(this).find('img');
                          </script>
                          

                          【讨论】:

                            【解决方案18】:

                            如果你的 img 正好是 div 中的第一个元素,那么试试

                            $(this.firstChild);
                            

                            $( "#box" ).click( function() {
                              let img = $(this.firstChild);
                              console.log({img});
                            })
                            <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                            
                            <div id="box"><img src="https://picsum.photos/seed/picsum/300/150"></div>

                            【讨论】:

                              【解决方案19】:

                              您可以使用本机 javascript

                              如果您有多个图像标签,请使用

                              this.querySelectorAll("img")

                              如果只有一个图像标签,那么我们

                              this.querySelector("img")

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2018-07-07
                                • 1970-01-01
                                • 2010-10-24
                                • 2012-12-22
                                • 2012-04-18
                                • 1970-01-01
                                相关资源
                                最近更新 更多