Combina due script jQuery simili in uno script if / then

Sto cercando di combinare due loop jQuery, basati sul codice delle domande qui risolte, che rimuovono immagini e iframe dai post di WordPress e li spostano a nuove div o a nuove liste. Le mie precedenti domande hanno cercato di raggiungere ognuno di questi risultati in modo indipendente, ma ora ho bisogno di combinarli in una singola pagina, selezionando quale utilizzare in base al contenitore principale.

In particolare, voglio che il primo script venga eseguito su tutti i contenitori

tranne quello con l’ID #clients . Quello dovrebbe usare il secondo script.

Immagino di aver probabilmente bisogno di una sorta di logica if / then che esegua il codice appropriato per il selettore, ma sto facendo fatica a raggiungere questo objective. Attualmente uno script sta rompendo l’altro.

Ecco i due script: si prega di notare il commento tra parentesi alla riga 4:

 jQuery("document").ready (function($){ // Elements you want to match var matchesEl = "img, iframe" // For each section [I have added a 'not-#clients' selector, which doesn't work but gives an idea of the logic I'm attempting], get its index number and do the following: $('section !#clients').each(function(index){ //If there is a matched element (for each section), if ($(this).find(matchesEl).length > 0) { // create a div.royalSlider and prepend to this section $('
', {'class': 'royalSlider'}).prependTo(this) // For each matched element into this section (we don't need to get index number here), $(this).find(matchesEl).each(function() { // add .rsImg class to this element and insert on the div.royalSlider, // not any div.royaSlider, but that one with equivalent index given before $(this).addClass('rsImg').appendTo($('section .royalSlider').eq(index)); }); } }); }); jQuery("document").ready (function($){ var matchesEl = "img, iframe" $('section #clients').each(function(index){ if ($(this).find(matchesEl).length > 0) { $('
    ').appendTo($('section'); $(this).find(matchesEl).each(function() { //The line code under will only works if all your
    s always have at least one matched element. //$("
  • ").append($(this)).appendTo($('section ul').eq(index)); //So the right code is: $("
  • ").append($(this)).appendTo($('section').eq(index).children('ul')); }); } $('p').filter(function () { return $.trim(this.innerHTML) == "" }).remove(); }); });

Piuttosto che eseguire due script che si scontrano, ho bisogno di sviluppare uno script che funzioni selettivamente in base al selettore jQuery.

Vorrei provare a scrivere questo script unificato e postarlo qui, piuttosto che mostrare i due, ma attualmente il secondo script (che tenta di creare elementi

    ) non funziona affatto, e non sono sicuro di come farlo funzionare da solo, che sembrerebbe essere un prerequisito per combinarli.

    Se aiuta, il sito su cui sto lavorando può essere visto (in fase di sviluppo!) Qui .

    Molte grazie in anticipo per qualsiasi aiuto con questo.

    1) Usa $('section:not(#clients)') invece di $('section !#clients')

    2) Non è necessario avere jQuery("document").ready (function($){ ... }); due volte. Puoi mettere tutto lo script in uno solo. E non è necessario dichiarare var matchesEl due volte se ha ancora lo stesso contenuto alla seconda volta.

    3) Semanticamente, se si utilizza un ID chiamato clients è necessario disporre di un solo #clients nella pagina, quindi non è necessario disporre di una funzione each() in quell’elemento.

    Il codice sopra dovrebbe fare il trucco:

     jQuery("document").ready (function($){ // Elements you want to match var matchesEl = "img, iframe" // For each section [I have added a 'not-#clients' selector, which doesn't work but gives an idea of the logic I'm attempting], get its index number and do the following: $('section:not(#clients)').each(function(index){ //If there is a matched element (for each section), if ($(this).find(matchesEl).length > 0) { // create a div.royalSlider and prepend to this section $('
    ', {'class': 'royalSlider'}).prependTo(this) // For each matched element into this section (we don't need to get index number here), $(this).find(matchesEl).each(function() { // add .rsImg class to this element and insert on the div.royalSlider, // not any div.royaSlider, but that one with equivalent index given before $(this).addClass('rsImg').appendTo($('section .royalSlider').eq(index)); }); } }); //No need for each() here (neither index) // If there is a matched element in #clients, do: if ($('#clients').find(matchesEl).length > 0) { // Append
      to #clients $('
      ').appendTo($('#clients')); // For each matched element into #clients $('#clients').find(matchesEl).each(function() { //Create a
    • , append the element content into
    • and insert it on
        into #clients $("
      • ").append($(this)).appendTo($('#clients').children('ul')); }); } $('p').filter(function () { return $.trim(this.innerHTML) == "" }).remove(); });