2016-04-05 17 views
5

ho utilizzando il seguente codice per aggiungere tag script dopo esistente racchiude tag script (l'aggiunta di nuovi tag script all'interno del file html per codice)aggiungere tag line script dopo lo script precedente indetend

return '\n' + "<script>\n" + '\t' + scriptContent + "\n</script>\n"; 

(contenuto Script è helloworld

l'aspetto contenuto HTML come seguire

enter image description here

voglio che la seconda tag script di apertura sarà la linea AF il tag script allegato (nella prima riga) come posso farlo? il primo '\ n' non aiuta qui ...

E 'solo lavorando quando aggiungo br, come posso rimuovere questo esattobr se questa è l'unica soluzione che ho qui .. .

return "<br />" +"\n" +"<script>\n" + '\t' + scriptContent + "\n</script>\n"; 

si prega di dare un'occhiata al seguente js violino entrambi tag script non sono frastagliata dopo aver fatto clic su Convert ...

prega di dare un'occhiata al seguente jsFiddle (sI Milar per quello che uso, che ha portato da SO come riferimento)

JSFiddle

jsfiddle.net/rd0mn3wh/1

come si può vedere quando si fa clic su convertire sia oggetto script in cui non frastagliata (il nuovo script e lo script esistente), come posso gestirlo, o forse c'è modo migliore per farlo?

Voglio che il nuovo script sarà aggiunge come seguire (lo script con l'alerty dentro ...

.... 
ui-resourceroots="{'tdrun': './'}"> 
    </script> 
     <script> 
      alert("test"); 
     </script> 

Ho bisogno il seguente:

  1. Inserire un nuovo script dopo l'ID script fornito (nel codice dopo test-ui-bootstrap ')

  2. valore attributo aggiornamento (wh it

    è fornita la chiave)

Sia sotto risposte sono non aiuta qui ...

+0

Hai provato questo duo: '\ r \ n' – Jer

+1

Sembra un problema XY. Perché hai bisogno di fare questo? –

+0

@ C0dekid.php - grazie ma non funziona ... –

risposta

9

Il problema è che .insertAfter() è tagliare la leader white-space dal Stringa HTML. La soluzione è utilizzare invece .after(). L'ho capito giocando con il violino e qui c'è lo updated fiddle.

+0

Ho testato il violino e questo funziona. Dovrebbe essere la risposta accettata. – jdforsythe

0

ne dite di questo:

return "\n<script>\n\t" + scriptContent + "\n</script>\n"; 
+1

Sebbene abbia abbreviato la stringa raggruppando stringhe, il codice è lo stesso. –

+0

Perché dare una risposta che hanno già provato? – DibsyJr

4

Il problema ha a che fare con il punto in cui la stringa restituita sarà processata d.

\n, \r, \t, ecc sono tutte JavaScript codici stringa di fuga e, come tali, essi funzionano solo quando la stringa viene valutata dal runtime JavaScript. Se si dispone di una stringa JavaScript che contiene questi codici e si passa tale stringa al parser HTML (ad esempio, tramite .innerHTML), verrà chiesto al parser HTML di valutare tale stringa e nel mondo del parser HTML, <br> è il modo in cui si aggiunge un avanzamento di riga, non \n. Ecco perché lo <br> funziona per te.

Quindi, quando lo strumento \n viene valutato dal motore JavaScript, nella stringa viene iniettato un carattere di nuova riga, ma quando il parser HTML ottiene quel carattere di nuova riga, lo ignora semplicemente, come farebbe con qualsiasi ritorno a capo nel markup.

In passato, potevamo ottenere questo codice "carino" iniettandolo con document.writeln(), che scriveva il contenuto e quindi aggiungeva un line feed nel codice HTML. Puoi ancora farlo oggi, ma non è considerato una buona pratica perché richiede l'inserimento del codice in linea all'interno del documento HTML, altrimenti sovrascrivi l'intero DOM.

Se questo è qualcosa che vuoi solo perché ti farà sentire caldo e confuso, ti consiglio di dimenticarlo e andare avanti.

Infine, ecco il modo standard DOM di creazione di nuovi elementi e iniettare nella DOM:

var o = document.getElementById("output"); 
 
var scriptContent = "alert('Hello World!')"; 
 
var s = document.createElement("script"); 
 
var t = document.createTextNode(scriptContent); 
 
s.appendChild(t); 
 
o.appendChild(s);
<div id="output"> 
 

 
</div>

+0

HI Scott, dai un'occhiata al seguente jsFiddle, come puoi vedere quando fai clic su invia entrambi gli oggetti di script dove non rientrano (il nuovo script e lo script esistente), come posso gestirlo? Grazie! https://jsfiddle.net/rd0mn3wh/1/ –

+0

Si prega di vedere la mia domanda di aggiornamento, in qualsiasi direzione come migliorare il codice? Grazie signore –

+0

@JhonD Devi dirci dove vuoi lo script perché sembra che stia andando esattamente dove l'hai detto. –