我刚刚学会了jquery如何访问动态生成的内容,在其父对象(或第一个非动态的父级)周围放置一个“气泡”,然后告诉它如何处理其中的事件等
我有一个表(静态),动态添加行。
<table class="aBorder_ClearBlack" width="100%" id="tblEveryone">
<tr class="TableHeading_Dark_Small">
<td>Current User Calls</td>
<td><span id="theRefresh" style="cursor:pointer">
<img ... onclick="javascript:clicky()"...></span>
</td>
</tr>
以及添加行的代码:
function clicky() {
var table = document.getElementById("tblEveryone");
var tmpRowCount = table.rows.length;
//clear existing rows first (else it just appends)
for (var x = 2; x < tmpRowCount; x++) {
table.deleteRow(x);
tmpRowCount--;
x--;
}
jQuery.each(users, function (index, user) {
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
row.style.display = "none"; <--------
row.setAttribute('class', 'BeforeHover_Clean');
var cell1 = row.insertCell(0);
cell1.innerHTML = users[index].Name;
var cell2 = row.insertCell(1);
cell2.innerHTML = users[index].Calls;
});
$(".BeforeHover_Clean").show(); <-----
}
然后我用来“绑定”每行上的点击事件的代码
$(document).ready(function () {
$('#tblEveryone').delegate(".BeforeHover_Clean", "click", function () {
var whatClicked = this.innerHTML.toLowerCase().split("</td>")[0].split("<td>")[1];
document.getElementById("aIframe").src = "Calls.aspx?aUser=" + whatClicked;
});
});
事情是(行标有&lt; ---- above,second block), row.style.display ,正确地从没有可见性的项目开始,但是最后一行, $(“。BeforeHover_Clean”)。show(); 显然无法工作,因为内容是动态的。 有没有办法操纵委托或其他一些jquery功能,在需要时再次设置项目?
我在这个层面上一无所知。将“点击”事件绑定到父母就像我一样好!大声笑。我现在觉得像查尔斯巴贝奇! ;)
答案 0 :(得分:2)
它是动态的这一事实无关紧要。
你有一个相当奇怪的混合jQuery和DOM JavaScript,可能没有帮助,并且还大大增加了你的代码。
例如,您的each
循环可以压缩如下:
jQuery.each(users, function (index, user) {
var $newRow = $("<tr class='BeforeHover_Clean'><td>" + users[index].Name+ "</td><td>" + users[index].Calls + "</td></tr>").hide();
$("#tblEveryone").find('tbody').append($newRow);
});
尝试使用ID选择器$("#myid");
而不是document.getElementById();
,并使用一些jQuery DOM操作方法,append()
,prepend()
,insertAfter()
等等。
不是您问题的具体答案,但希望有一些有用的指导。