Eu tenho o seguinte código
<b class="xyzxterms" style="cursor: default; ">bryant keil bio</b>
Como eu substituiria a b
tag por uma h1
tag, mas manteria todos os outros atributos e informações?
javascript
jquery
bammab
fonte
fonte
Respostas:
Aqui está uma maneira de fazer isso com jQuery:
Exemplo: http://jsfiddle.net/yapHk/
Update , aqui está um plugin:
Exemplo: http://jsfiddle.net/mmNNJ/
fonte
children
não funcionou, mascontents
funcionou..each
bloco como mostra a resposta abaixo também.Não tenho certeza sobre jQuery. Com JavaScript simples, você pode fazer:
DEMO
Não tenho certeza de quão compatível com vários navegadores isso é.
Uma variação pode ser:
Para obter mais informações, consulte
Node.attributes
[MDN] .fonte
while(child = child.nextSibling)
falhou. Obrigado!@jakov e @Andrew Whitaker
Aqui está uma melhoria adicional para que ele possa lidar com vários elementos de uma vez.
fonte
A resposta de @Jazzbo retornou um objeto jQuery contendo um array de objetos jQuery, que não podiam ser encadeados. Eu mudei para que ele retorne um objeto mais semelhante ao que $ .each teria retornado:
(Também fiz uma limpeza de código para que ele passe jslint.)
fonte
each
loop).Só consigo pensar em copiar tudo manualmente: exemplo jsfiddle
HTML
Jquery / Javascript
fonte
@Andrew Whitaker: Proponho esta mudança:
Então você pode fazer coisas como:
$('<div>blah</div>').changeElementType('pre').addClass('myclass');
fonte
Gosto da ideia de @AndrewWhitaker e outros, de usar um plugin jQuery - para adicionar o
changeElementType()
método. Mas um plugin é como uma caixa preta, não importa o código, se é pequeno e funciona bem ... Então, desempenho é necessário e é mais importante do que código."Pure javascript" tem melhor desempenho que jQuery: Eu acho que o código de @FelixKling tem melhor desempenho que @AndrewWhitaker e outros.
Aqui, um código "Javavascript puro" (e "DOM puro"), encapsulado em um plugin jQuery :
fonte
Aqui está um método que uso para substituir as tags html no jquery:
fonte
Com
jQuery
sem iteração de atributos:O
replaceElem
método abaixo aceitaold Tag
,new Tag
econtext
e executa a substituição com sucesso:Boa sorte...
fonte
Solução Javascript
Copie os atributos do elemento antigo para o novo elemento
Substitua o elemento antigo pelo novo
fonte
map
cria uma nova matriz não utilizada, ela pode ser substituída porforEach
.Aqui está minha versão. É basicamente a versão de @fiskhandlarn, mas em vez de construir um novo objeto jQuery, ele simplesmente sobrescreve os elementos antigos com os recém-criados, portanto, nenhuma fusão é necessária.
Demo: http://jsfiddle.net/0qa7wL1b/
fonte