2010-01-26 57 views
2

,我有以下的HTML的ASP.NET直放站内呈现:如何获得特定的div文字与jQuery过滤器()

<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

回答

4

您无需致电filter

您可以简单地写$('div:not(.spnKey)', oDiv).text()

要回答你的问题,你正在使用filternot错误。 filter方法返回一个jQuery对象,其中包含您调用它的某个元素。 (不是他们的孩子)。要这样使用它,你应该拨打$(oDiv).children().filter(...)

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

+1

工作!感谢您的更正和示例,非常好。 – Clay 2010-01-26 16:06:22

+0

+1整齐的东西,令人印象深刻。 – Fr0zenFyr 2013-04-03 04:50:31

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事件适用于每一个实例(我猜重复)div出现在DOM预渲染。应该更轻量一点。

+0

我完全同意,我首先尝试了这种方法。我没有成功让点击事件触发。也许它与Repeater在ListView中有关,所有这些都在UpdatePanel中。 UpdatePanel是可能的罪魁祸首。所以,我采用onclick方法采用了这种公认不太理想的方法。尽管如此,我仍然坚信这是正确的方式。感谢您的反馈。 – Clay 2010-01-26 16:28:17

+1

@Clay:你尝试$(“div.divDE-item”)。live(“click”,function(){... – 2010-01-26 16:45:33

+0

非常好,工作。我还没有得到检查出新的生活)方法。再次感谢! – Clay 2010-01-26 17:12:04