2010-07-02 5 views
3

Dans la version 1.3.2 de jQuery, les travaux suivants:Annexer un tableau d'objets jQuery à un autre noeud jQuery

$('<span/>').append(
    $([ 
    $('<span/>').append(
     $('<a>').attr('href', 'http://google.com').text('Google') 
    ), 
    $('<span/>').text('Foo') 
    ]) 
) 

Il semble que dans jQuery 1.4.2, le $ ([...]) échoue silencieusement. J'ai besoin que ce code soit compatible avec les deux versions de jQuery car nos tests unitaires sont forcés à fonctionner en version 1.3.2, mais l'application principale utilise jQuery 1.4.2. Des idées?

+0

voir http://bugs.jquery.com/ticket/8897. – shesek

Répondre

0

Essayez d'utiliser .get(0) pour récupérer l'élément réel à ajouter à la baie. Semble travailler:

Essayez-:http://jsfiddle.net/TFY22/

(Vous pouvez changer la version jQuery à gauche dans jsFiddle, puis cliquez sur Exécuter en haut.)

var test = $('<span/>').append(
    $([ 
    $('<span/>').append(
     $('<a>').attr('href', 'http://google.com').text('foo') 
    ).get(0), // Get DOM element 
    $('<span/>').text('Google').get(0)// Get DOM element 
    ]) 
); 

$('body').append(test); 

EDIT: En ce qui concerne les commentaires ci-dessous, il existe des approches plus simples.

Cela va créer toute la structure à la fois.

$('<span><span><a href="http://google.com">foo</a></span><span>Google</span></span>'); 

Si vous avez des données dynamiques pour inclure, vous pouvez concaténer dans, juste être conscient qu'il ya des problèmes de sécurité si la source des données est inconnue.

http://jsfiddle.net/TFY22/1/

var text = 'foo'; 

$('<span><span><a href="http://google.com">' + text + 
           '</a></span><span>Google</span></span>'); 

Ou adopter une approche plus détaillée, et de créer chaque élément séparément, et ajoutez:

http://jsfiddle.net/TFY22/2/

var $top = $('<span/>'); 
var $a = $('<a/>').attr('href','http://google.com').text('foo'); 

$('<span/>').append($a).appendTo($top); 
$('<span/>').text('Google').appendTo($top); 

ou une chaîne vos .append() appels pour donner un aspect structuré :

http://jsfiddle.net/TFY22/4/

var test = $('<span/>') 
    .append($('<span/>') 
      .append($('<a>').attr('href', 'http://google.com').text('foo')) 
      ) 
    .append($('<span/>').text('Google')); 

$('body').append(test);​ 
+0

Cela fonctionne certainement. Je souhaite juste que ce n'était pas une telle horreur – YourParadigm

+0

@YourParadigm - Eh bien, ce n'est pas beaucoup plus d'une horreur que l'original. Juste ajouté les deux '.get (0)' appels. Y a-t-il une raison particulière pour laquelle vous avez adopté cette approche, par opposition à quelque chose de plus propre? – user113716

+0

@patrick Qu'auriez-vous fait pour le rendre plus propre? "Cleanest" est ce que j'essaie d'accomplir. – YourParadigm

Questions connexes