Выбор jQuery не работает, когда элемент TD содержит элементы BR - PullRequest
2 голосов
/ 18 января 2010

Я столкнулся с некоторой проблемой с некоторым кодом jQuery, но по сути у меня есть таблица, которая может иметь или не иметь элементы BR в первом столбце. Когда нет элементов BR, следующий код работает нормально и возвращается значение. Однако при наличии элементов BR кодовые значения возвращают любые значения для большинства столбцов. Есть идеи, что может происходить?

Следующий jQuery работает правильно для первой строки ('Row-19') и покажет значение для каждого элемента; однако для второй строки («Строка-21») отображаются только значения для первого и следующего за последним столбца. В производственной среде мы используем этот код для обновления или получения значения в данном элементе TD по требованию, поэтому итерация по столбцам не является предпочтительным вариантом.

JQuery

alert($('#Row-' + id + ' :nth-child(' + ndx + ')').html());

Код XHTML

<tr id="Row-19">
    <td>Value</td>
    <td>Value</td>
    <td>Value</td>
    <td>Value</td>
    <td>1</td>
    <td>2</td>
    <td>
        <a href="#" title="Edit" onclick="edit('19');">[Edit]</a>&nbsp;
        <a href="#" title="Delete" onclick="delete('19');">[Delete]</a>
    </td>
</tr>
<tr id="Row-21">
    <td>
        Value<br />
        Value<br />
        Value<br />
        Value<br />
        Value<br />
    </td>
    <td>Value</td>
    <td>Value</td>
    <td>Value</td>
    <td>3</td>
    <td>4</td>
    <td>
        <a href="#" title="Edit" onclick="edit('21');">[Edit]</a>&nbsp;
        <a href="#" title="Delete" onclick="delete('21');">[Delete]</a>
    </td>
</tr>

1 Ответ

2 голосов
/ 18 января 2010

Хорошо работает для меня: http://jsbin.com/awame3

$("a[title='Edit']").click(function(e){ 
  e.preventDefault();  
  $(this).parent().prevAll("td").each(function(){ 
    alert($(this).html()); 
  }); 
}); 

Обновление определенной ячейки

$("a[title='Edit']").click(function(e){
  e.preventDefault();
  var cell = $(this).closest("tr").find("td:eq(0)").html("new values");
  alert($(cell).html());
});

Вы можете применить класс к любой ячейке, которой нужно манипулировать, и отказаться от адресациивсего индексов:

$(this).parent().siblings("td.editMe").html("new values");

Получение ячеек 2 - 5

Используя фильтр, вы можете получить ячейки со 2 по 5:

$(this).closest("tr").children("td:gt(0)").filter(":lt(5)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...