Как удалить все нетекстовые узлы из начала содержимого div? - PullRequest
0 голосов
/ 22 сентября 2011

Как я могу удалить нетекстовые узлы (BR, пустые <p> теги, nbsp) из html div, но только те, которые появляются до появления первого текстового узла.Точно так же, как удаление начальных пробелов из обычной строки символов, но здесь, чтобы удалить начальные пробелы из строки HTML.

Я пытался использовать регулярные выражения, но часто возникают проблемы при таком подходе.Я хотел бы сделать это, используя NodeType и JQuery.Если у кого-нибудь есть пример, пожалуйста, поделитесь.

Спасибо!

UPDATE:

Возьмите следующий DIV: -

<div id="foo">
        <div>
            <div>
                <p>
                </p>
                <p>
                    &nbsp;
                </p>
                <br/>
                <p>
                    this is a test</p>
                <p>
                    &nbsp;
                </p>
                <br />
                <br>
                <p>
                    this is a fast test
                </p>
            </div>
        </div>
    </div>

При прохождении "foo "для функции удаления пробелов, она должна выглядеть следующим образом: -

<div id="foo">
        <div>
            <div>
                <p>
                    this is a test</p>
                <p>
                    &nbsp;
                </p>
                <br />
                <br>
                <p>
                    this is a fast test
                </p>
            </div>
        </div>
    </div>

1 Ответ

2 голосов
/ 22 сентября 2011

Что-то вроде этого должно сделать это:

var $contents = $('#foo').contents();
var stopFiltering = false;

$contents.filter(function() {
    var isEmpty = $.trim($(this).text()) == '' ||
                  this.tagName == "BR";
    var shouldFilter = !stopFiltering && isEmpty;
    stopFiltering = stopFiltering || !isEmpty;
    return shouldFilter;
}).remove();

Это адаптация функции filter.Каждый элемент (включая текстовые узлы) проверяется на «пустоту» (isEmpty).После просмотра первого непустого узла shouldFiltering устанавливается в false, и таким образом условие фильтрации выражает ваши требования: выбирайте пустые узлы и элементы перед первым непустым.

См. Это в действии .

Обновление: Рекурсивное решение здесь .Он просто упаковывает вышесказанное в функцию TrimElements и рекурсивно обращается ко всем дочерним элементам целевого элемента перед обработкой самого целевого элемента.

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