Jquery найти подэлемент от $ (это) - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть таблица, в которой каждая строка содержит форму. см. ниже

<table>
<tr><th>Fee Type</th><th>Amount</th><th>% Discount</th><th>Discounted Amount</th><th>Payable to</th><th>Remove</th></tr>    
<tr>
   <form>
         <td></td>
         <td class="cost"></td>
         <td> <input /> </td>
         <td class="discount"></td>
         <td></td>
   </form>
<tr>
</table>

Теперь я намерен создать глобальную кнопку сохранения, которая будет проходить по каждой форме и выполнять пост Ajax. см. ниже

    function saveEditedFees(){
        $("#savefeechanges").click(function(){
            $("#feestable form").each(function(){
                alert( $(this).attr('id') );
            });
        });
    }

Моя проблема заключается в доступе к значениям «td» с использованием $ (this) для элементов с классом «стоимость» и «скидка» Я пытался

alert( $(this).find("td").eq(2).html() );
alert($(this).siblings('.cost').text());
alert($("td .cost" ,this).text());

По сути, я пытаюсь проверить, равно ли значение, содержащееся в <td class="cost">, <td class="discount">, таким образом, я буду выборочно делать пост ajax.

Пожалуйста, помогите.

Ответы [ 3 ]

6 голосов
/ 02 декабря 2011

Неверная разметка.

У вас есть <form> в детстве <tr>.

В Chrome HTML отображается как:

<tr>
   <form></form>
         <td></td>
         <td class="cost"></td>
         <td> <input> </td>
         <td class="discount"></td>
         <td></td>
</tr>

Как видите, <form> больше не имеет содержимого.

И помните, что .eq() принимает индекс, начинающийся с нуля, поэтому он должен быть:

$(this).find("td").eq(1)

... чтобы получить элемент .cost.

0 голосов
/ 02 декабря 2011
$(this).closest('form').find('.cost');

Это похоже на другой вопрос, на который я ответил, где я объяснил traversal .

Однако, прежде чем продолжить, вы должны реорганизовать свой HTML, так как элемент TR должен содержать только TD илитыс.Если вы чувствуете, что вам нужно вложить таблицу в другую таблицу для разметки, тогда будьте готовы.В этом случае я бы порекомендовал div, но нарушение правил таблицы обязательно приведет к срыву роа.

0 голосов
/ 02 декабря 2011

Вы хотели иметь в своей строке пробел с надписью:

alert($("td .cost" ,this).text());

должно быть

alert($("td.cost", this).text());

Имейте в виду, что контекст this будет означать, что this относится к элементу формы, поэтому siblings() не будет работать. Я думаю, что вы на правильном пути с $("td.cost", this), используя .html() или .text().

...