обмен узлов в живом наборе узлов - PullRequest
0 голосов
/ 23 декабря 2010

Это было проблемой для меня ...

У меня есть набор узлов в XML-документе.Мне нужно отсортировать их на основе определенного значения узла.Поэтому, если я перебираю узлы, а затем значение узла соответствует моим критериям, я хочу, чтобы оно дошло до конца.

Проблема, конечно, как только я меняю местами, так как узлы находятся в живом наборе, указатель итерации, конечно, пропускает одну запись, так как appendChild работает с живым множеством.

Пока это мой код, но, как я уже сказал, он может пропустить запись из-за перестановки:

for (var i=1; i <= nElem; i++)
{
    var node = getNode(dom,"//item[" + i + "]");
    var state = getNodeValue(dom,"//item[" + i + "]/state");
    if ((state != 'XX') && (i != nElem))
    {
        node.parentNode.appendChild(node);              
    }
}

На самом деле я хочу, чтобы все элементы в состоянии "XX" находились вверху.

У кого-нибудь есть разумная идея по этому поводу?Спасибо

1 Ответ

1 голос
/ 23 декабря 2010

Вы можете использовать array.sort () и передать пользовательскую процедуру сортировки:

  • var nodes = getNode(dom, "//item"); получает массив элементов
  • , затем удаляет записи в nodes из dom
  • сделать nodes.sort(sortfunction), где функция сортировки sortfunction(a,b)
  • реализовать sortfunction, чтобы он возвращал
    • -1, если a должно быть ниже, чем b
    • 0, если равно
    • 1, если a должно быть больше, чем b
  • добавить записи nodes обратно в dom

Я думаю, что это сделало бы (если я что-то не упустил).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...