jQuery,在父函数上使用.find?

时间:2011-09-03 23:21:53

标签: jquery

我有以下jQuery脚本......

$(function() {
    $('.eventWrapper').bind('click', function(event) {

        var srvName = $(this).data('service');
        var srvVal1 = $(this).data('serviceval');

        if (srvName == 'livestream')
        {
            var query = 'http://x'+srvVal1+'x.api.channel.livestream.com/2.0/livestatus.json?callback=?';
            $.getJSON(query, function(data)
            {
                if (data['channel']['isLive'])
                {
                    $(this).find('.eventTime').html('<b>Currently Live</b> ('+data['channel']['currentViewerCount']+' viewers)');
                }
            });
        }
    });
});

它运行在以下代码上:

<div class="eventWrapper" data-service="livestream" data-serviceval="srklive">
    <div class="eventIcon"><a href=""><img src="image.php?u=3942"></a></div>
    <div class="eventName"><a href="">This is a test!</a></div>
    <div class="eventTime">09-02-2011 08:00 PM</div>
</div>

它非常自我解释......它与类.eventWrapper绑定。当有人点击div中的任何地方时,它会检查数据。如果数据匹配,则提取JSON查询。到目前为止,这完全正常。

现在的问题是如何用它应该的内容替换.eventTime类中的文本。显然,我不能使用$(this)因为它与现有的getJSON函数有关,而不是绑定函数。我该怎么做呢?

另外,如何在页面加载时激活事件,而不是单击?

2 个答案:

答案 0 :(得分:2)

将此存储为变量以在$ .getJSON的回调中使用,因此您指的是正确的上下文/ this

$(function() {
    $('.eventWrapper').bind('click', function(event) {
        var $this = $(this);
        var srvName = $(this).data('service');
        var srvVal1 = $(this).data('serviceval');

        if (srvName == 'livestream')
        {
            var query = 'http://x'+srvVal1+'x.api.channel.livestream.com/2.0/livestatus.json?callback=?';
            $.getJSON(query, function(data)
            {
                if (data['channel']['isLive'])
                {
                    $this.find('.eventTime').html('<b>Currently Live</b> ('+data['channel']['currentViewerCount']+' viewers)');
                }
            });
        }
    });
});

答案 1 :(得分:1)

这会有用吗?

$('.eventWrapper').bind('click', function(event) {

    var srvName = $(this).data('service');
    var srvVal1 = $(this).data('serviceval');
    var evtTime = $(this).find('.eventTime');

    if (srvName == 'livestream')
    {
        var query = 'http://x'+srvVal1+'x.api.channel.livestream.com/2.0/livestatus.json?callback=?';
        $.getJSON(query, function(data)
        {
            if (data['channel']['isLive'])
            {
                evtTime.html('<b>Currently Live</b> ('+data['channel']['currentViewerCount']+' viewers)');
            }
        });
    }
});