JQuery - .each () не может изменить класс выбранных элементов

0

Поскольку я повторяю через набор элементов HTML, переданных в функцию, я пытаюсь установить класс на определенные элементы (rel), в зависимости от теста. После того, как я установил класс, содержимое, которое я возвращаю, похоже, не было изменено. Я уверен, что в моей логике есть основное отключение - какие-либо рекомендации относительно того, почему мои изменения не появляются?

этот JSFiddle показывает это в (in) action: http://jsfiddle.net/spRvh/3/

HTML

<ul> 
      <li title = "ID: 3 " id = "ID1" rel = "departmentgroup" class = "leaf"> 
        <a href = "#" class = "departmentgroup" rel = "15000_3_16010_relationship_Department-Path"> 
            <ins class = "departmentgroup"> & nbsp; </ins>
            Floating
        </a> 
      </li>
</ul>   

JQuery:

newData = $.trim(data);
$.each($(newData).find("a"), function (i, item) {
    thisrel = $(item).attr("rel");
    if ($('#' + thisrel).length > 0) {
        $(item).children().removeClass().addClass('tick');
    }
  });
$.each($(newData).find("a"), function (x, curr) {
    alert($(curr).children().attr("class")); // no changes evident
});
  • 0
    У вас есть элемент с идентификатором #15000_3_16010_relationship_Department-Path ?
  • 0
    @adeneo - да, рассматриваемый элемент существует ... и я поместил предупреждение в коде, который устанавливает класс, который подтвердил соответствие, было выполнено ... но все равно не было никакого изменения класса при переборе newData после предположительно установки " Ins "соответственно
Показать ещё 2 комментария
Теги:
each

1 ответ

0
Лучший ответ

Эта проблема возникает из-за того, что вы передаете строку HTLM, а не фактические узлы DOM, поэтому вы меняете классы на абсолютно несвязанной части HTML, которая не имеет ничего общего с фактическими узлами в документе.

Чтобы исправить это, измените

fixit($("#testit").html());

в

fixit($("#testit"));

и изменить функцию для работы с DOM, а не строку, которую вы передаете

function fixit(data) {
    $.each(data.find("a"), function (i, item) {
        var thisrel = $(item).attr("rel");
        if ( $('#' + thisrel).length > 0 ) {
            $(item).children().removeClass().addClass('tick');
        }
    });
}
  • 0
    абсолютно правильно ... спасибо, я знал, что это должно быть что-то совершенно очевидное. Ваше предложение решило мою проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню