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.
Ich denke, es sollte eine bessere Lösung geben, die Skriptelemente klonen. Und Divs haben keine Werte. – epascarello
Ich würde vorschlagen, dies nicht zu tun. Es wird sehr schwierig sein, den JS im Skript-Element zu bearbeiten. – evolutionxbox
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