Есть ли хороший способ удалить текст, который не обернут элементом? [Дубликат]

Вы можете сортировать dataFrame по счету, а затем удалять дубликаты. Я думаю, что это проще:

df.sort_values('count', ascending=False).drop_duplicates(['Sp','Mt'])
15
задан Florent 24 July 2012 в 16:01
поделиться

4 ответа

Если вы хотите удалить все дочерние текстовые узлы, вы можете использовать .contents() , а затем .filter() , чтобы уменьшить согласованный набор только для текстовых узлов:

$("#foo").contents().filter(function () {
     return this.nodeType === 3; 
}).remove();​​​​​​​

Вот рабочий пример .

Примечание. Это сохранит любые существующие обработчики событий над дочерними элементами, ответы на которые с помощью .html() не будут выполняться ( поскольку элементы удалены из DOM и добавлены обратно).

Примечание 2: Ответы по некоторым связанным вопросам показывают аналогичный код в моем ответе здесь, но они используют константы nodeType ( например return this.nodeType === Node.TEXT_NODE). Это плохая практика, поскольку IE ниже версии 9 не реализует свойство Node. Безопаснее использовать целые числа (которые можно найти в DOM level 2 spec ).

26
ответ дан James Allardice 22 August 2018 в 19:03
поделиться
  • 1
    Ужасные .html решения не удаляют обработчики в этом случае (или, может быть, они это делают?), Но это случайно, потому что .html также может вставлять узлы (недокументированные). Edit: Хорошо, что они определенно удаляют обработчики из-за неявного .empty() в .html – Esailija 24 July 2012 в 16:07
  • 2
    @Esailija - Использование кода из ответа mgraph, кажется, удаляет обработчик события: jsfiddle.net/jamesallardice/PXxC4/1 – James Allardice 24 July 2012 в 16:08
  • 3
    Да, ты прав, глупые мозговые пучки: P – Esailija 24 July 2012 в 16:10
  • 4
    +1. Это ответ. – Tim Down 24 July 2012 в 16:32
  • 5
    Если вы получили ошибку ILLEGAL в своем браузере (например, WebKit), посмотрите на принятый ответ на этот вопрос для ответа: stackoverflow.com/questions/4404526/… – Serj Sagan 10 July 2013 в 21:07

попробуйте следующее:

$("#foo").html($("#foo").find("div"));​

demo: http://jsfiddle.net/PXxC4/

7
ответ дан mgraph 22 August 2018 в 19:03
поделиться

Вот версия, отличная от jQuery, которая работает во всех основных браузерах в IE 5, чтобы продемонстрировать, насколько небезопасна жизнь без jQuery.

Демо: http://jsfiddle.net/ timdown / aHW9J /

Код:

var el = document.getElementById("foo"), child = el.firstChild, nextChild;

while (child) {
    nextChild = child.nextSibling;
    if (child.nodeType == 3) {
        el.removeChild(child);
    }
    child = nextChild;
}
9
ответ дан Tim Down 22 August 2018 в 19:03
поделиться

Вы можете использовать это.

$("#foo").html($("#foo").children());​
2
ответ дан xdazz 22 August 2018 в 19:03
поделиться
  • 1
    Это единственный, который работал для меня. – zorrotmm 14 March 2017 в 20:28
Другие вопросы по тегам:

Похожие вопросы: