在find() - 用法之后获取文本节点

时间:2012-04-19 07:28:51

标签: jquery

我在点击图片后使用JQuery显示工具提示框。到目前为止,我可以选择正确的div,然后我可以识别包含文本节点的正确子div。不幸的是,我无法获得sub-div的文本节点。有什么问题 - 在currentDescriptionContainer上调用html()后我得到'null'?提前谢谢!

var tooltipItems = jQuery('.tooltipContainer').length;
var i=0;
for (i=0; i<tooltipItems; i++){
    jQuery('.tooltipContainer').eq(i).bind('click', function(){
    var currentContainer = jQuery('.tooltipContainer').eq(i);
    var currentDescriptionContainer = currentContainer.find('div');
    var currentDescriptionText = currentDescriptionContainer.html();
    console.log(currentDescriptionText);
    showRendererToolTipForIpad(this, currentDescriptionText);
    hideRenderedToolTipAfterTimeout();
    });
}

1 个答案:

答案 0 :(得分:0)

您的代码可以真正简化。尝试此代码,打开控制台,看看执行是否正确

var tooltipItems = $('.tooltipContainer');
tooltipItems.bind('click', function() {
     var divs = $(this).find('div'), cdText;

     console.log('Element has %d descendent div/s' , divs.length);

     if (divs.length) {
         cdText = divs.text();
         console.log('Text found: ' , cdText);
         showRendererToolTipForIpad(this, cdText); /* this is the i-th DOM node */
         hideRenderedToolTipAfterTimeout();
     } 
});

请注意,html()应用于元素集合时仅影响第一个元素,因此在此示例中我使用text()代替(我不知道您期望有多少元素)检索)

关于您的代码,我怀疑您正在创建一个可能导致您的问题的非自愿关闭:当发生点击事件时您有

var currentContainer = jQuery('.tooltipContainer').eq(i);

但由于for周期已经到了结尾,变量i将是您的集合的最后索引。因此,无论您点击什么工具提示,currentContainer始终是使用该索引的参考