jQuery没有返回jquery.closest()。text()

时间:2014-08-18 06:40:43

标签: javascript jquery

我目前遇到的问题是jQuery从最近的td.index返回文本。 Heres what I'm working with

$(document).ready(function() {
    $.getJSON("http://ddragon.leagueoflegends.com/cdn/4.14.2/data/en_US/rune.json", function(response){
        console.log(response.data);
        $.each(response.data, function (index, entry) {
            $('table.runes').append('<tr><td class="index">'
                    +index+ '</td><td class="icon"> \
                    <div style="width:48px;height:48px;background:url(./assets/runes/rune0.png) -' +entry.image.x+ 'px -' +entry.image.y+ 'px no-repeat"> \
                    </div></td><td class="entry-name">'
                    +entry.name+ '</td></tr> \
                    <tr><td></td><td class="entry-desc">'
                    +entry.description+ '</td></tr>'
                );
        });
    });
    jQuery("body").on("click", "td.entry-name", function() {
        var getText = $(this).closest('td.index');
        alert(getText.text());
    });
});

正如您所看到的,该表是使用JSON / jQuery生成的,并且有一个td,其类名为index,其中包含每行的ID号。

当点击td.entry-name时,它应该查找最接近的td.index并将其中的文本(ID号)作为警报返回。出于某种原因,这不起作用。

我想知道是否可以通过查看代码来查看问题。

3 个答案:

答案 0 :(得分:1)

因为td.indextd.entry-name的兄弟,而不是祖先,所以请使用.siblings()代替.closest()

jQuery("body").on("click", "td.entry-name", function() {
    var getText = $(this).siblings('td.index');
    alert(getText.text());
});

答案 1 :(得分:0)

您需要使用.siblings().prevAll()代替.closest()

var getText = $(this).siblings('td.index');

<强> Working Demo with siblings

var getText = $(this).prevAll('td.index');

<强> Working Demo with prevAll

答案 2 :(得分:0)

您可以使用此

var getText = $(this).parent().find('td.index');
alert(getText.text());

DEMO