2016-07-14 5 views
0

ich eine solche HTML-Code haben:kopieren HTML-Block mit Tags script

<div> 
    <div id="text">text></div> 
    <script>$("#text").val('some value');</script> 
</div> 

ich kopieren Sie diesen HTML durch .clone() und bearbeiten html innen. Ergebnis:

<div> 
    <div id="1-text">text></div> 
    <script>$("#text").val('some value');</script> 
</div> 

Ich möchte ID innerhalb Tags Skript ändern. $("#1-text").val('other value'); Wie kann ich es tun?

+2

Ich denke, es sollte eine bessere Lösung geben, die Skriptelemente klonen. Und Divs haben keine Werte. – epascarello

+1

Ich würde vorschlagen, dies nicht zu tun. Es wird sehr schwierig sein, den JS im Skript-Element zu bearbeiten. – evolutionxbox

+0

Ich brauche HTML kopieren, und ich brauche Handler dafür, wie kann ich es auf andere Weise tun? Ich weiß nicht genau Menge Block, so kann ich nicht alle Handler auf einmal schreiben – Dev

Antwort

0

Sie können einfach eine Variable hinzufügen, die dynamisch angibt, was ausgewählt werden soll. also, wenn Sie durch Ihre Werte zu durchlaufen waren eine Schleife verwenden, können Sie etwas tun:

$("#text_"+i).val('other value'); 

Sie könnten auch einen Zähler gesetzt und als neue divs sind die i-Schritten zugegeben. Es ist also flexibel.

Ich bin nicht genau sicher, was Ihr Endziel ist, aber ich würde diese Methode nicht empfehlen, wenn Sie versuchen, das Javascript im <script> Tag zu manipulieren. Wie ich glaube, wäre das umständlich.

+0

Es ist ein guter Weg, aber ich suche flexible Lösung. Es gibt viele andere Funktionen innerhalb des Skripts, wie zB Datumsauswahl und Telefonmasken. Wenn ich HTML-Block kopiere, möchte ich alle Funktionen des vorherigen Blocks erhalten. – Dev

0

Wenn Sie den gesamten HTML-Block kopieren möchten, sollten Sie Ihren Inline-JavaScript-Code als Container an diesen Block binden. Nicht ID. Wenn Sie also den Block verschieben oder kopieren, kann Ihr Skript alle mit container verbundenen Elemente finden.

<div id="containerOne" class="js-container"> 
    <div class="js-text" data-text="some value">some value</div> 
    <script> 
     var $el = $("script").last().closest(".js-container").find(".js-text"); 
     $el.text($el.data("text")); 
    </script> 
</div> 

Hiermit erhalten Sie Zugriff auf Elemente nach Klasse nicht ID. Hinweis mit "js" Präfix ist nur für Javascript-Manipulation nicht für CSS-Styling.

Auch Sie müssen das Skript nicht selbst ändern. Sie können die Werte über "data-" Attribute ändern.

In Ihrem externen Skript können Sie jede Klonlogik mit verschiedenen Methoden kapseln. Zum Beispiel:

var myModule = { 
    clone: function(containerSelector) { 
    var $donorEl = $(containerSelector); 
    var $donorScript = $donorEl.find('script'); 
    $script = $("<script />"); 
    $script.text($donorScript.text()); 
    $recipientEl = $donorEl.clone(); 
    $recipientEl.attr('id', 'containerTwo'); 
    var newValue = 'other value'; 
    $('.js-text', $recipientEl).data('text', newValue); 
    $('body').append($recipientEl); 
    $('script', $recipientEl).replaceWith($script); 
    } 
}; 

myModule.clone('#containerOne'); 

Sie können the working example sehen.

Verwandte Themen