Поскольку я повторяю через набор элементов 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
});
Эта проблема возникает из-за того, что вы передаете строку 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');
}
});
}
#15000_3_16010_relationship_Department-Path
?