如何使用jQuery filter()获取特定的div文本

时间:2010-01-26 15:42:04

标签: jquery filter jquery-selectors

我有以下在ASP.NET Repeater中呈现的html:

<div class="divDE-item" onclick="addFilter(this);">
  <span class="spnKey">Some key</span>
  <div>1234</div>
</div>

我意识到在外部div上进行onclick可能不是最优雅的以jQuery为中心的方法。但是,考虑到我的情况,它运作良好。

这是我的addFilter()函数:

function addFilter(oDiv) {
  $(document).ready(function() {
    // Get and set the prefix text for the label. i.e. "Key = "
    sDEName = $(oDiv).find("span").text();
    $('#<%= lblDEName.ClientID %>').text(sDEName + " = ");

    // Get the actual filter text value. i.e. "1234"
    // sFilter = $(oDiv).text();
    var sFilter = $(oDiv).filter(function() {
        var filtered = $(this).not(".spnKey");
        return filtered
    });

    $('#<%= txtValue.ClientID %>').val(sFilter);
  });
}

目标是输出显示如下(1234是文本框的值):

某些键= 1234

然而,我得到的输出是:某些键=某些键1234

2 个答案:

答案 0 :(得分:4)

您无需致电filter

您只需撰写$('div:not(.spnKey)', oDiv).text()

即可

要回答您的问题,您使用的是filternot错误。 filter方法返回一个jQuery对象,其中包含您调用它的一些元素。 (不是他们的孩子)。要以这种方式使用它,您应该致电$(oDiv).children().filter(...)

not方法与filter相反,并返回jQuery对象中与函数选择器不匹配的元素。因此,您也可以写$(oDiv).children().not('.spnKey')

答案 1 :(得分:2)

看起来你完全是错误的做法。试试这个 - 让你的转发器像往常一样吐出代码:

<div class="divDE-item">
  <span class="spnKey">Some key</span>
  <div>1234</div>
</div>

并使用以下javascript来获取值:

$(document).ready(function() {
  $("div.divDE-item").click(function() { 
     $thisElement = $(this);
     var thisValue = $($thisElement).children("div").text();
     $('#<%= txtValue.ClientID %>').val(thisValue);
  });
});

这样它会将click事件应用于DOM预渲染中出现的每个实例(我猜是重复的)div。应该更轻一些。