开发者问题收集

JQuery .each() 返回未定义

2012-12-17
185

我有两个表。第一个表仅用于标题,因为我没有找到使标题不可滚动的解决方案。第二个表包含内容,但在加载侧面时为空。首先是两个表的代码。

            <table width="100%">
                <caption class="splitselection">
                    <b>Downloads</b>
                </caption>
                <thead align="left">
                    <tr> 
                        <th scope="col" width="36%"   align="left"          >Dateiname           </th>
                        <th scope="col" width="32%"   align="left"          >Fortschritt         </th>
                        <th scope="col" id="status" width="22%"align="left" >Status              </th>
                        <th scope="col" width="10%" align="left"            >Ordner &ouml;ffnen  </th>
                    </tr>
                </thead>
            </table>
            <div style="overflow:auto; height:115px;  width:100%" class="downloadFrame">
                <table width="100%" id="download_table" align="center">
                    <tbody align="left">
                    </tbody>
                </table>
            </div>

所以现在我想用以下代码捕获表中的每个 <tr> 元素及其内容:

var interval = window.setInterval(function() {
    $('#download_table > tbody > tr').each(function() {
        alert($(this).find('td')[0].html);
    });
},5000);

我正在创建一个检查特定表单元格的间隔。

在我的警报中,我想检索这个表单元格,但这里的警报返回“未定义”。 如果我只是写 alert($(this).find('td')[0]); ,它会返回 HTML htmlObjectTableCell

如果不添加任何表行,我的间隔什么也不做。如果我添加一行,我会收到警报。因此,当我想要获取 tablecell html 时,一定是出了什么问题

然而我尝试使用 .html .val 和 .text,但得到的结果与之前相同。

3个回答

请尝试以下方法:

$(this).find('td').eq(0).html();

$(this).find('td:first-child').html();

顺便说一句, $("foo").html 返回对 html 函数的引用,而不是调用它。当您想实际执行名为 function_name 的函数时,请确保使用 function_name() 而不是 function_name

解释

在 jQuery 中, $('selector')[0] 不会返回 jQuery 包装的对象,而是 PODO(普通的旧 Dom 对象?)。这意味着您无法在返回的对象上调用 jQuery 函数。但是 $('selector').eq(0) 返回 jQuery 包装的对象,因此您可以在其上调用 jQuery 函数。

Behrang Saeedzadeh
2012-12-17

您正在循环遍历作为 #download_table 的直接子元素的 tbody 元素的每个直接子元素。您的标记显示 tbody 元素根本没有任何子元素。

ninja
2012-12-17

DOM 元素内容的 HTML 存储在 innerHTML 属性中,而不是名为 html 的属性中,因此您需要将该行更改为以下内容:

alert($(this).find('td')[0].innerHTML);
Anthony Grist
2012-12-17