0
Ich implementiere eine Append-Operation mit $.each
- Methode. Das Ergebnis ist lustig (doppelt so viel Zeit für Elemente!). Ich habe möglicherweise eine Problemumgehung, um dies zu beheben.Was ist dieses Problem, und wie kann man auf jQuery's eigene Weise verhindern?
Aber ich möchte das eigentliche Problem hier verstehen, gibt es auch eine Möglichkeit, dies zu beheben mit jQuery
eigenen Weg?
Vielen Dank im Voraus.
var data = ["orange", "apple"];
var temp = function() {
var template = '<dl class="dropdown"><dt> <div class ="dropdownclass" ><span class="hida">Select</span> <span class="multiSel"></span> </div></dt><dd><div class="mutliSelect"><ul><li><input type="checkbox" value="Control" />Control Node</li><li><input type="checkbox" value="Border" />Border Node</li</ul></div></dd></dl>';
return $(template).clone();
}
$(document).ready(function() {
var tr;
var ut
$.each(data, function(i, value) {
tr = $('<tr />', {
id: i + 'id'
});
ut = temp();
ut.addClass('hema' + i).click(function() {
alert($(this).prop('class'));
});
tr.append(ut);
tr.appendTo('tbody'); //getting multple instance!!!
})
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<th>title</th>
</tr>
<tbody>
</tbody>
</table>
Werfen Sie einen Blick auf Ihre Elemente in dev Werkzeuge, haben Sie zwei '
' Elemente, weil einige Browser automatisch falsche HTML beheben, dh ein ', wenn ich Konsole, ich bekomme genau 1 Wert auf jedes Mal – user2024080
, wenn Sie eine tr haben, sollte es entweder innen sein tbody oder thead, wenn es nicht browser wird es automatisch in einen tbody wickeln, so wird es zwei tbodies in der tabelle und wenn sie appendTo an sie wird zweimal angehängt werden. – Manish
Antwort
Das Problem ist einfach, weil Ihre HTML ungültig ist. Ihr
tbody
muss alletr
Elemente umfassen. Da Sie einetr
außerhalb dertbody
der HTML-Renderer hatte eine zweitetbody
um das - Sie können dies sehen, wenn Sie Ihr Original-Snippet in einem DOM-Inspektor überprüfen. Wenn Sie also antbody
angehängt haben, wurde der Inhalt für beide Elemente dupliziert.Wenn Sie Ihre HTML zu beheben, geht das Problem weg:
Bitte beachte, dass ich auch ein paar Änderungen an Ihrer JS Logik gemacht; Es gibt keine Notwendigkeit für die
clone()
, da Sie sowieso ein neues Element erstellen, die var-Deklarationen lokal in dereach
-Schleife machen und einen einzelnen delegierten Event-Handler verwenden, anstatt einen an jedes Element in der Schleife anzuhängen.Quelle
2016-11-10 09:35:32
Verwandte Themen