[英]jQuery, how to select dynamically generated html element
我下面的Javascript代码动态生成了以下html,
<tbody> <tr class="student"> <td class="missed-col">0</td> </tr> </tbody>
生成上面的html的代码,
var $tbody = $('tbody'); var $row = $('<tr></tr>').addClass('student'); var $nameCol = $('<td></td>').addClass('name-col').text(name); var $missedCol = $('<td></td>').addClass('missed-col').text('0'); $row.append($nameCol); $row.append($missedCol); $tbody.append($row);
然后,我想在missed-col类之前再插入一行。 由于某种原因,由于代码跳转到另一个功能块中,因此我无法在上面的代码中引用$ missedCol。 所以,我做了以下事情,
$('<td class="attend-col"><input type="checkbox"></td>').insertBefore($('tbody tr .missed-col'));
但是,它不起作用。 我看到的原因是jQuery无法以这种方式选择动态生成的元素。 我在网上发现了一些类似的问题,但是找不到一个好的答案。
尝试将选择器传递给insertBefore()
而不是传递jquery
对象,因为这是一个过大的选择。
HTML代码:
$('<td class="attend-col">3</td>').insertBefore('tbody tr .missed-col');
使用LIVE或ON方法可以实现所需的http://api.jquery.com/live/
下面是一个简单的例子
var counter = 0; $("button").click(function() { $("h2").append("<p class='test'>click me " + (++counter) + "</p>") }); // With on(): $("h2").on("click", "p.test", function(){ alert($(this).text()); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <h2></h2> <button>generate new element</button>
我没有问题,可以将这段代码放到$(document)ready
并用table
代替tbody
的地方。
$(document).ready(function(){ var $tbody = $('table'); var $row = $('<tr></tr>').addClass('student'); var $nameCol = $('<td></td>').addClass('name-col').text("test"); var $missedCol = $('<td></td>').addClass('missed-col').text('0'); $row.append($nameCol); $row.append($missedCol); $tbody.append($row); $('<td class="attend-col"><input type="checkbox"></td>').insertBefore('table tr .missed-col'); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> </table>
看一下代码片段。
$(function(){ var $tbody = $('tbody'); var $row = $('<tr></tr>').addClass('student'); var $nameCol = $('<td></td>').addClass('name-col').text(name); var $missedCol = $('<td></td>').addClass('missed-col').text('0'); $row.append($nameCol); $row.append($missedCol); $tbody.append($row); console.log($tbody.find(".student")); //below line did the trick $('<td class="attend-col"><input type="checkbox"></td>').insertBefore($tbody.find("tr .missed-col")); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <tbody> <tr class="student"> <td class="missed-col">0</td> </tr> </tbody> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.