Da ich jQuery 1.3+ benutze alle außer einem zeitgesteuerten Test verwendet. Das andere ist einfaches Javascript, das ich im Jahr 2000 gefunden habe. Ich habe aufgehört, diesen Weg zu gehen, da es ungefähr 150 Sekunden dauerte, um den Test durchzuführen. Ich habe eine ganze Reihe von jQuery-Optimierungswebseiten gelesen, die sich auf die Auswahl eines einzelnen Elements beziehen. Ein "#id" ist der beste Fall für die Verwendung, aber jetzt habe ich das Problem von alle Kontrollkästchen in einer Spalte in einer ziemlich großen Tabelle, die mehrere Checkbox-Spalten hat.Was ist der schnellste Weg, um eine große Anzahl von Checkboxen auszuwählen und zu deaktivieren?
Ich habe eine Seite eingerichtet, die 20.000 Tabellenzeilen mit zwei Kontrollkästchen-Spalten erstellt. Das Ziel ist es, die zweite Spalte zu überprüfen, wie lange das gedauert hat, und dann die Häkchen zu entfernen und zu sehen, wie lange das gedauert hat. Offensichtlich wollen wir die niedrigste Zeit. Ich benutze nur IE6 und 7 und in meinem Fall werden alle meine Benutzer das gleiche tun.
20.000 Zeilen, die Sie sagen? Das habe ich auch gesagt, aber das wird zur Produktion (aus meiner Hand) und es ist zu spät, um es jetzt zu ändern. Ich versuche nur einen Hail Mary mit 1 Sekunde auf der Uhr zu werfen. Außerdem habe ich gelernt, dass input.chkbox nicht der schnellste Selektor (für IE7) ist! :)
Die Frage ist, gibt es eine bessere Möglichkeit, diese jQuery oder sonst? Ich würde es lieben, in weniger als einer halben Sekunde auf meiner Maschine zu laufen.
So haben Sie nicht den ganzen Mist in das Feld eintragen ich bereits hier getan habe ist der Test Sachen, die ich kam mit:
Aktualisiert Morgen 4/14 weitere Zeit Studien umfassen:
<form id="form1" runat="server">
<div>
<a href="#" id="one">input[id^='chkbox'][type='checkbox']</a><br />
<a href="#" id="two">#myTable tr[id^='row'] input[id^='chkbox'][type='checkbox']</a><br />
<a href="#" id="three">#myTable tr.myRow input[id^='chkbox'][type='checkbox']</a><br />
<a href="#" id="four">tr.myRow input[id^='chkbox'][type='checkbox']</a><br />
<a href="#" id="five">input[id^='chkbox']</a><br />
<a href="#" id="six">.chkbox</a><br />
<a href="#" id="seven">input.chkbox</a><br />
<a href="#" id="eight">#myTable input.chkbox</a><br />
<a href="#" id="nine">"input.chkbox", "tr"</a><br />
<a href="#" id="nine1">"input.chkbox", "tr.myRow"</a><br />
<a href="#" id="nine2">"input.chkbox", "#form1"</a><br />
<a href="#" id="nine3">"input.chkbox", "#myTable"</a><br />
<a href="#" id="ten">input[name=chkbox]</a><br />
<a href="#" id="ten1">"input[name=chkbox]", "tr.myRow"</a><br />
<a href="#" id="ten2">"input[name=chkbox]", "#form1"</a><br />
<a href="#" id="ten3">"input[name=chkbox]", "#myTable"</a><br />
<a href="#" id="ten4">"input[name=chkbox]", $("#form1")</a><br />
<a href="#" id="ten5">"input[name=chkbox]", $("#myTable")</a><br />
<a href="#" id="eleven">input[name='chkbox']:checkbox</a><br />
<a href="#" id="twelve">:checkbox</a><br />
<a href="#" id="twelve1">input:checkbox</a><br />
<a href="#" id="thirteen">input[type=checkbox]</a><br />
<div>
<input type="text" id="goBox" /> <button id="go">Go!</button>
<div id="goBoxTook"></div>
</div>
<table id="myTable">
<tr id="headerRow"><th>Row #</th><th>Checkboxes o' fun!</th><th>Don't check these!</th></tr>
<% for(int i = 0; i < 20000;i++) { %>
<tr id="row<%= i %>" class="myRow">
<td><%= i %> Row</td>
<td>
<input type="checkbox" id="chkbox<%= i %>" name="chkbox" class="chkbox" />
</td>
<td>
<input type="checkbox" id="otherBox<%= i %>" name="otherBox" class="otherBox" />
</td>
</tr>
<% } %>
</table>
</div>
<script type="text/javascript" src="<%= ResolveUrl("~/") %>Javascript/jquery.1.3.1.min.js"></script>
<script type="text/javascript">
$(function() {
function run(selectorText, el) {
var start = new Date();
$(selectorText).attr("checked", true);
var end = new Date();
var timeElapsed = end-start;
$(el).after("<br />Checking Took " + timeElapsed + "ms");
start = new Date();
$(selectorText).attr("checked", false);
end = new Date();
timeElapsed = end-start;
$(el).after("<br />Unchecking Took " + timeElapsed + "ms");
}
function runWithContext(selectorText, context, el) {
var start = new Date();
$(selectorText, context).attr("checked", true);
var end = new Date();
var timeElapsed = end-start;
$(el).after("<br />Checking Took " + timeElapsed + "ms");
start = new Date();
$(selectorText, context).attr("checked", false);
end = new Date();
timeElapsed = end-start;
$(el).after("<br />Unchecking Took " + timeElapsed + "ms");
}
$("#one").click(function() {
run("input[id^='chkbox'][type='checkbox']", this);
});
$("#two").click(function() {
run("#myTable tr[id^='row'] input[id^='chkbox'][type='checkbox']", this);
});
$("#three").click(function() {
run("#myTable tr.myRow input[id^='chkbox'][type='checkbox']", this);
});
$("#four").click(function() {
run("tr.myRow input[id^='chkbox'][type='checkbox']", this);
});
$("#five").click(function() {
run("input[id^='chkbox']", this);
});
$("#six").click(function() {
run(".chkbox", this);
});
$("#seven").click(function() {
run("input.chkbox", this);
});
$("#eight").click(function() {
run("#myTable input.chkbox", this);
});
$("#nine").click(function() {
runWithContext("input.chkbox", "tr", this);
});
$("#nine1").click(function() {
runWithContext("input.chkbox", "tr.myRow", this);
});
$("#nine2").click(function() {
runWithContext("input.chkbox", "#form1", this);
});
$("#nine3").click(function() {
runWithContext("input.chkbox", "#myTable", this);
});
$("#ten").click(function() {
run("input[name=chkbox]", this);
});
$("#ten1").click(function() {
runWithContext("input[name=chkbox]", "tr.myRow", this);
});
$("#ten2").click(function() {
runWithContext("input[name=chkbox]", "#form1", this);
});
$("#ten3").click(function() {
runWithContext("input[name=chkbox]", "#myTable", this);
});
$("#ten4").click(function() {
runWithContext("input[name=chkbox]", $("#form1"), this);
});
$("#ten5").click(function() {
runWithContext("input[name=chkbox]", $("#myTable"), this);
});
$("#eleven").click(function() {
run("input[name='chkbox']:checkbox", this);
});
$("#twelve").click(function() {
run(":checkbox", this);
});
$("#twelve1").click(function() {
run("input:checkbox", this);
});
$("#thirteen").click(function() {
run("input[type=checkbox]", this);
});
$('#go').click(function() {
run($('#goBox').val(), this);
});
});
</script>
</form>
Ich meine nicht, nicht hilfreich, aber 20k Zeilen auf einer Seite ist nur schlechtes Design. Sie sollten das reparieren. :) –
Nun ... kein Scherz. :) Ich habe es nicht getan! Momentan ist nicht genug Zeit, um es für diese Version zu reparieren. Dies wird bei der nächsten Veröffentlichung das erste Mal sein. Dieses Projekt hat bisher viele "interessante" Herausforderungen aufgeworfen. – rball