Пройдите через DOM, чтобы найти определенный тег DIV, где идентификаторы не являются уникальными - PullRequest
0 голосов
/ 10 марта 2011

Таблица ниже зациклена, поэтому я не могу полагаться на уникальный идентификатор, мне нужно пройти через DOM, чтобы получить предметы.Я хотел бы сообщить о результатах моего вызова ajax, когда нажата кнопка CHECK.

<table cellpadding="3" class="tablesorter" id="table_id">
<tr>
<td><input name="systemname" type="text" id="systemname" class="systemname" value="#rsRequestSystems.systemname#" size="50" maxlength="50">
<div class="SystemNameStatus" id="SystemNameStatus" style="color:##0000FF"></div></td>
<th class="form"><label>Location</label></th>
<td align="center"><button type="button" id="removeButton" class="fg-button ui-state-default ui-corner-all remove_SystemName" style="width:70px;">Remove</button>
<button type="button" id="checkButton" class="fg-button ui-state-default ui-corner-all check_SystemName" style="width:70px;">Check</button></td>
</tr>
</table>

Ниже приведено мое утверждение jQuery;сейчас я просто пытаюсь жестко закодировать некоторый текст, но в идеале я буду возвращать некоторый текст из результата ajax для заполнения элемента SystemNameStatus.Я не могу изолировать DIV.Я не чувствую себя комфортно при обходе DOM, несмотря на то, что смотрю на примеры jQuery.

$(".check_SystemName").live("click", function(){
  var thisClicked = $(this);
  thisClicked.parent().children('.SystemNameStatus').text('found it');
});

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

ID, по определению, должен быть уникальным. Если это не так, то все ставки выключены относительно того, какой элемент вы получите, когда браузер запустит getElementById (что и делает jQuery за кулисами).

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

1 голос
/ 10 марта 2011

У вас будут проблемы здесь.id атрибуты должны быть уникальными.Если это не так, у вас нет действующего DOM, и все ставки сняты.Вы, конечно, не можете полагаться на поведение стандартных платформ, поскольку они ожидают, что DOM будет следовать определенным правилам ... например, id уникальны.

0 голосов
/ 10 марта 2011

Данкрамб очень прав. приведенный ниже код может все еще работать, но я никоим образом не намеренно продублирую идентификаторы.

$(".check_SystemName").live("click", function(){
var thisClicked = $(this);
thisClicked.closest("tr").find('.SystemNameStatus').text('found it');
});

Как только вы исправите свои идентификаторы или просто избавитесь от них, поскольку они сломаны и им нельзя доверять как есть, вот что сделали мои небольшие изменения. Вы были близки, .parent () проходит только один слой вверх по Dom, в частности, <td> .parents ("tr") может найти группу <tr> s, если вы находитесь во вложенной таблице. .closest ("tr") находит ближайшего родителя в dom. исходный вызов .children () прошел только один слой глубиной, снова до <td> s. .find ("") будет продолжать вниз по потомкам.

...