2013-04-29 11 views
6

Mam stronę, nad którą pracuję i która używa tagów "na bok", które nie pozwalają mi czytać IE8 bez względu na to, co próbuję, nawet z Shiv HTML5. Zastanawiam się więc, w jaki sposób zastąpiłbyś istniejące znaczniki innymi znacznikami jQuery?Jak zastąpić znacznik HTML innym znacznikiem w jquery?

Na przykład, gdybym chciał zmienić

<aside> 
    <h3></h3> 
</aside> 

do

<div> 
    <h3></h3> 
</div> 

Jak to zrobić?

+0

Co chcesz osiągnąć poprzez zastąpienie tag? –

+2

'document.createElement ('aside')' powinno umożliwić pracę z tagiem na bok w IE8. Używasz doctype html5, prawda? –

+0

.replaceWith ('tag_here'); – Memolition

Odpowiedz

26

Spróbuj tego:

$('aside').contents().unwrap().wrap('<div/>'); 
  • Get zawartość aside pierwszy.
  • Teraz zawartość: unwrap.
  • Teraz po prostu wrap zawartość wewnątrz nowego tagu, tutaj: div.

DEMO


Ponadto, można to zrobić za pomocą .replaceWith() metody takie jak:

$('aside').replaceWith(function() { 
    return $('<div/>', { 
     html: $(this).html() 
    }); 
}); 

DEMO

+0

To działa idealnie! Wielkie dzięki. –

+1

Spowoduje to niepoprawne utworzenie superflouwnego 'div' z powodu dołączenia węzłów tekstowych (białych znaków) podczas używania' .contents', zobacz http://tinker.io/493db/1 – Nelson

+0

Otrzymuję bardzo różne wyniki, gdy próbuję tego w IE8: http://jsfiddle.net/JpzhL/2/embedded/result/ –

7
$('aside').replaceWith('<div><h3></h3></div>'); 
+0

To rozwiązanie działa również. –

1

To będzie wykonać zadanie:

$('aside').replaceWith("<div>" + $('aside').html() + "</div>"); 

Również użycie .html() daje bardziej dynamiczne podejście.

3

Działa to dla każdego elementu w dokumencie i zachowuje jego zawartość. Używanie okładów prowadzi do wystąpienia wielu elementów div, jeśli występują podziały wierszy w treści elementu aside.

$('aside').each(function() { $(this).replaceWith("<div>"+$(this).html()+"</div>") });

0

Oto rozwiązanie, które zastępuje tagów HTML5 blokowe, zachowując stylistykę na div, które zastępują znaczników HTML5. Po prostu zastąpienie tagów pozostawia za sobą atrybuty.

$('article, aside, figcaption, figure, footer, header, nav, section, source') 
    .each(function(){ 
     var el = $(this), 
      html = el.html(), 
      attrs = { 
       "id": el.attr('id'), 
       "classes": el.attr('class'), 
       "styles": el.attr('style') 
      }; 

     console.log('Replacing ' + el.prop('tagName') + ', classes: ' + attrs.classes); 
     el.replaceWith($('<div></div>').html(html).attr(attrs)); 
    }); 

(może potrzebować trochę więcej pracy na tagu źródłowego, który ma „src” i „typ” atrybuty)