удалить XML-узел с помощью jQuery .each и $ (this)

#jquery #xml

#jquery #xml

Вопрос:

Я перебираю некоторые элементы, используя jQuery .each(), и я хочу удалить узел, когда он удовлетворяет определенным требованиям. Я не уверен в синтаксисе для этого, я пробовал несколько вещей:

 $(this).remove();
$xml.remove(this);
$xml.removeNode(this);
  

…и т.д. Возникли некоторые проблемы с поиском рабочего примера, может ли кто-нибудь указать мне правильное направление? Я предполагаю, что это просто, я просто не смог найти правильный синтаксис. Ниже приведена нерабочая скрипка.

http://jsfiddle.net/SHNpn/

Спасибо

Комментарии:

1. ваш нерабочий скрипт вызван отсутствием тегов {} после утверждения IF, об остальном я не знаю

2. Они не всегда нужны. Я обычно оставляю их, когда спешу и использую только однострочные действия. Хотя спасибо.

Ответ №1:

Это потому, что вызов remove() удаляет только элемент из DOM. Это не удаляет его из вашего $siblings объекта jQuery.

Если вы вызовете find() еще раз, чтобы повторно сопоставить родственные файлы после удаления alex узла, вы получите ожидаемые результаты:

 var $xml = $(xmlString);
var $siblings = $xml.find("sibling");

$siblings.each(function(){
    var name = $(this).attr("name");
    if (name == "alex")
        $(this).remove();
});

// Here, the "alex" element is not in the DOM, but still part of $siblings.

$xml.find("sibling").each(function(){
    var name = $(this).attr("name");
    console.log(name);
});

// Since we're calling find() again, the code above will only print "bob".
  

Вы найдете обновленный fiddle здесь.