使用JQuery event.target与孩子们一起工作

时间:2013-07-19 23:04:25

标签: dom jquery

我的问题专门针对http://api.jquery.com/event.target/#example-1

如果您使用<li>或其他标记中的范围来更改<b>之类的样式(我已完成here),则该元素的该部分将不会触发JQuery功能切换它的孩子。怎么可能让这个工作?

HTML:

<ul>
    <li><b>This doesn't work,</b> this does
    <ul>
      <li>sub item 1-a</li>
      <li>sub item 1-b</li>
    </ul>
  </li>
  <li>item 2
    <ul>
      <li>sub item 2-a</li>
      <li>sub item 2-b</li>
    </ul>
  </li>
</ul>

JavaScript的:

function handler(event) {
  var $target = $(event.target);
  if( $target.is("li") ) {
    $target.children("ul").toggle();
  }
}
$("ul").click(handler).find("ul").hide();

2 个答案:

答案 0 :(得分:10)

要继续使用您当前的表单,我建议您使用closest()

function handler(event) {
    $(event.target).closest('li').children("ul").toggle();
}
$("ul").click(handler).find("ul").hide();

JS Fiddle demo

虽然我自己使用,但我更喜欢:

$('li').on('click', function(e){
    e.stopPropagation();
    $(this).find('ul').toggle();
});

JS Fiddle demo

参考文献:

答案 1 :(得分:0)

e.target子项的完整示例,最接近数据表和外部数据。

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <title>example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <link rel="stylesheet" href="css/style.css">
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script type="text/javascript" charset="utf8" src="js/jquery.dataTables.js"></script>
  <script src="js/script.js"></script>
</head>
<body>

<div class="col-md-12 sectionone">
 <div id="coxtable">

 <div class="col-md-3 outerblock" id="section1"><div  class="blocks section1"><h6 class="span1">Section1</h6><span class="span1a">Section1a</span></div></div>
 <div class="col-md-3 outerblock" id="section2"><div  class="blocks section2"><h6 class="span1">Section2</h6><span class="span1a">Section2a</span></div></div>
 <div class="col-md-3 outerblock" id="section3"><div  class="blocks section3"><h6 class="span1">Section3</h6><span class="span1a">Section3a</span></div></div>
 <div class="col-md-3 outerblock" id="section4"><div  class="blocks section4"><h6 class="span1">Section4</h6><span class="span1a">Section4a</span></div></div>

 </div>
</div>
<div class="sectiontwo col-md-12">
 <table id="example">
        <thead>
            <tr>            
                <th>name</th>
                <th>stargazerscount</th>
                <th>forkscount</th>
                <th>description</th>

            </tr>
        </thead>
        <tbody>         
        </tbody>
    </table>

    </div>
    <div id="testmodal" class="modal fade" role="dialog">
  <div class="modal-dialog">
    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">Modal Header</h4>
      </div>
      <div class="modal-body">
        <p>Some text in the modal.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="modalbtn btn btn-default" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>
</body>
</html>

的Javascript

$(document).ready( function () {
var tables=$('#example').DataTable( {
 "ajax": {
             "type"   : "POST",          
            "url": "http://localhost/example/json/members.json",
             "dataSrc": function (json) {
      var return_data = new Array();
      for(var i=0;i< json.length; i++){    
        return_data.push({     
         'name': json[i].name,
          'stargazerscount'  : json[i].stargazerscount,
           'forkscount'  : json[i].forkscount,
          'description' : json[i].description
        })
        $('.overlay').hide();
        $(".loader").hide();
      }
      return return_data;
             }
    },

        "columns": [
            { "data": "name" },
            { "data": "stargazerscount" },
            { "data": "forkscount" },
            { "data": "description" }

        ]

}); 
/*onclick filter*/

    $(".outerblock").click(function(e){

      $("#testmodal").modal('show');

      var item=$(e.target).closest('span').text();

        $( ".modalbtn" ).one( "click", function(event) {
             $(this).off(event);
   alert(item)
    var tables=$('#example').DataTable( {
        "destroy":true,
 "ajax": {
             "type"   : "POST",          
            "url": "http://localhost/example/json/members.json?id="+item,
             "dataSrc": function (json) {
      var return_data = new Array();
      for(var i=0;i< json.length; i++){    
        return_data.push({     
         'name': json[i].name,
          'stargazerscount'  : json[i].stargazerscount,
           'forkscount'  : json[i].forkscount,
          'description' : json[i].description
        })
        $('.overlay').hide();
        $(".loader").hide();
      }
      return return_data;
             }
    },

        "columns": [
            { "data": "name" },
            { "data": "stargazerscount" },
            { "data": "forkscount" },
            { "data": "description" }

        ]

}); 
});


  });   

 $("#example").delegate("tbody tr td:first-child", "click", function(e){
    var item=$(e.target).text();
    //alert(item);
      $("#testmodal").modal('show');
      $( ".modalbtn" ).one( "click", function(event) {
             $(this).off(event);
    alert(item);


    var tables=$('#example').DataTable( {
        "destroy":true,
 "ajax": {
             "type"   : "POST",          
            "url": "http://localhost/example/json/members.json?id="+item,
             "dataSrc": function (json) {
      var return_data = new Array();
      for(var i=0;i< json.length; i++){    
        return_data.push({     
         'name': json[i].name,
          'stargazerscount'  : json[i].stargazerscount,
           'forkscount'  : json[i].forkscount,
          'description' : json[i].description
        })
        $('.overlay').hide();
        $(".loader").hide();
      }
      return return_data;
             }
    },

        "columns": [
            { "data": "name" },
            { "data": "stargazerscount" },
            { "data": "forkscount" },
            { "data": "description" }

        ]

}); 
}); 
}); 
});

JSON

[{
            "name": "mango",
            "stargazerscount": 526,
            "forkscount": "critical",
            "description": "fruits"
        },
{
            "name": "mobiles",
            "stargazerscount": 526,
            "forkscount": "major",
            "description": "electronics"
        },
         {
            "name": "mobiles",
            "stargazerscount": 526,
            "forkscount": "major",
            "description": "electronics"
        }
]