2010-01-26 6 views
2

У меня есть следующий HTML, что делает внутри ASP.NET Repeater:Как получить конкретный текст DIV с JQuery фильтром()

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

я понимаю, что наличие OnClick на внешнем DIV не может быть наиболее изящный подход, основанный на 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().

Чтобы ответить на ваш вопрос, вы используете filter и not неправильно. Метод filter возвращает объект jQuery, содержащий некоторые элементы в том, с которым вы его вызываете. (Не их дети). Чтобы использовать его таким образом, вы должны позвонить $(oDiv).children().filter(...).

Метод not противоположный filter и возвращает элементы в объекте jQuery, которые не соответствуют селектору функции. Поэтому вы также можете написать $(oDiv).children().not('.spnKey').

+1

Это сработало! Спасибо за исправление и пример, очень хорошо поставленный. – Clay

+0

+1 Аккуратный материал, впечатляющий. – Fr0zenFyr

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); 
    }); 
}); 

Таким образом, он будет применять это событие щелчка к каждому экземпляру, что (Я предполагаю, что повторяется) div, который появляется в предварительном рендеринге DOM. Должно быть немного более легким.

+0

Я полностью согласен, и сначала я попробовал этот подход. Мне не удалось запустить событие click. Возможно, это связано с тем, что ретранслятор находится в ListView, все из которых находятся в пределах UpdatePanel. Вероятно, виновником является UpdatePanel. Итак, я пошел с этим, по общему признанию, менее желательным подходом с помощью метода onclick. Тем не менее, я все уши, чтобы сделать это правильно. Спасибо за ответ. – Clay

+1

@ Clay: Вы пробовали $ («div.divDE-item»). Live («click», function() {... –

+0

Очень приятно, что сработало. Я не стал проверять новый live (). Еще раз спасибо! – Clay

Смежные вопросы