удаление> из списка путем идентификации правильного текстового узла с помощью javascript / jquery - PullRequest
0 голосов
/ 02 декабря 2011

Я задал несколько похожий вопрос сегодня днем, а потом понял, что ответ таков: мой вопрос был неправильным ...

с учетом следующего:

<p class="p"> 
<div> </div> 
<div>
<a href="foo"> a </a>  &gt;
<a href="foo1"> b </a> 
<a href="foo2"> c</a> 
<a href="foo3"> b </a>  &gt;
<a href="foo4"> c </a> 
</div>
</p>

Мне нужно удалить «& gt» со страницы, а также тег, предшествующий ему. Это динамический список, поэтому он будет постоянно расти со временем. Мне нужно, чтобы кто-то зафиксировал «>», удалил его, а затем удалил тег перед ним.

Есть предложения?

1 Ответ

2 голосов
/ 02 декабря 2011

Ваша разметка недействительна. Элементы <div> будут выброшены из <p>.

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

var els = $('.p');

do {
    els.contents().each(function(i,el) {
        if( el.nodeType === 3 && $.trim( el.data ) === '>' ) {
            el.parentNode.removeChild(el.previousSibling);
            el.parentNode.removeChild(el);
        }
    });
} while( ( els = els.children() ).length )

JSFIDDLE DEMO


Или чуть больше jQuery:

var els = $('.p');

do {
    els.contents().each(function(i,el) {
        if( el.nodeType === 3 && $.trim( el.data ) === '>' ) {
            $(el.previousSibling).remove();
            $(el).remove();
        }
    });
} while( ( els = els.children() ).length )

JSFIDDLE DEMO


Или это:

var els = $('.p');

do {
    els.contents().each(function(i,el) {
        if( el.nodeType === 3 && $.trim( el.data ) === '>' ) {
            $(el.previousSibling).add(el).remove();
        }
    });
} while( ( els = els.children() ).length )

JSFIDDLE DEMO

...