JavaScript: Como remover tags do nó?

votos
3

Em uma pergunta anterior que alguém me colocar a esguio http://code.google.com/p/rangy/ . É interessante mesmo se eu não compreendê-lo totalmente. Eu não sou uma pessoa JavaScript. No entanto, eu consegui fazer mais coisas com ele que eu preciso com exceção de 1. O conceito é uma RTE muito básico, apenas negrito, itálico etc. eu consegui isso, criou um link - feito isso também, OK o que pode ter tomado um cara JS 2 minutos me levou horas e horas - frustrante, mas eu acho que eu estou aprendendo um pouco - muito lentamente. De qualquer forma, usando esguio posso criar (código pobre desculpa) um link href como este:

$('#linkbut').live('click',function(){
        var sel = rangy.getSelection();     
        var range = sel.getRangeAt(0); 
        range.splitBoundaries(); 
        var textNodes = range.getNodes([3]); 
            for (var i = 0, len = textNodes.length; i < len; ++i) { 
            var newLink = document.createElement('a');
            newLink.setAttribute('href','test.html');
            var linkText = document.createTextNode(sel);
            var parent = textNodes[i].parentNode;
            parent.insertBefore(newLink,textNodes[i]); 
            newLink.appendChild(linkText);
            range.deleteContents();
            }
    });

#linkbuté um botão HTML simples eo href real (test.html) acima virá a partir do valor de um campo de entrada e não ser codificado. Mas o que não pode ser feito é eliminar o elo se eu quiser removê-lo.

Mais explicações: Uma vez que a ligação é criada I pode querer excluí-lo, então eu tentei o reverso do código acima - obviamente não é bom, então temos tão longe:

$('#deletelink').live('click',function(){
                var sel = rangy.getSelection();     
                var range = sel.getRangeAt(0); 
                range.splitBoundaries(); 
                var textNodes = range.getNodes([3]); 
                var txt = sel.toString();
                range.deleteContents();
                var replaceText = document.createTextNode(txt);
                sel.appendChild(replaceText);

            });

O que eu realmente gostaria de fazer (pode não ser possível) é ter alguma função genérico que remove qualquer elemento tag de um nó no exemplo acima o que estou tentando fazer é:

  1. Obter a gama - sel = rangy.getSelection();
  2. Turn sel para uma cadeia variável var txt = sel.toString();
  3. Excluir o conteúdo - incluindo os aelementos range.deleteContents(); , em seguida,
  4. Substituir o apagado com o texto versão var replaceText = document.createTextNode (txt); sel.appendChild (replaceText);

Eu fico até agora o conteúdo é excluído, mas eu não posso obter o novo - substituição de texto para a função.

Espero que tudo esteja claro - cos não é para mim;)

Publicado 20/03/2011 em 15:58
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Sei que uma velha questão, mas eu tive o mesmo problema e encontrou uma solução viável aqui .

var el = document.getElementsByTagName('span')[0]; // Get the element in question
var pa = el.parentNode;

while(el.firstChild) {
    pa.insertBefore(el.firstChild, el);
}

pa.removeChild(el);
pa.normalize();

Edit: O método normalize () é importante para que você não tem um monte de nós de texto adjacentes. Isso faz com que todos os nós de texto a ser agregadas em um nó de texto novamente.

Para sua pergunta exata, você pode iterar sobre todos os nós e, em seguida, executar o código acima.

Respondeu 16/08/2012 em 21:15
fonte usuário

votos
0

Você provavelmente deve olhar-se sobre como fazer a seleção aninhado em jQuery e como NeXXeuS disse que você deve olhar para a remoção do conteúdo via .html () no seu método selecionado.

Se você tem:

<div id="mydiv"></div>

E você executar: `

$('#mydiv').append('<a href="test.html">Test Link</a>');

O html será algo como:

<div id="mydiv"><a href="test.html">Test Link</a></div>

Você pode esta selecione o link com:

$('#mydiv a');

Você pode excluí-lo fazendo:

$('#mydiv').html('');
Respondeu 20/03/2011 em 16:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more