我有以下在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
答案 0 :(得分:4)
您无需致电filter
。
您只需撰写$('div:not(.spnKey)', oDiv).text()
。
要回答您的问题,您使用的是filter
和not
错误。 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。应该更轻一些。