在jquery中访问动态生成的内容

时间:2012-01-26 09:14:21

标签: javascript jquery dynamic delegates

我刚刚学会了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功能,在需要时再次设置项目?

我在这个层面上一无所知。将“点击”事件绑定到父母就像我一样好!大声笑。我现在觉得像查尔斯巴贝奇! ;)

1 个答案:

答案 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()等等。

不是您问题的具体答案,但希望有一些有用的指导。