Wenn eine Webseite mit <select>-Elementen gedruckt wird, wird die Select-Dropdown so gedruckt, wie sie aussieht.

Das ist natürlich auf einer gedruckten Seite grenzwertig nutzlos. Es können sogar wichtige Details versteckt werden, die für das Verständnis des Inhalts der gedruckten Seite entscheidend sind (z.B. Optionen für ein Produkt).
Leider kenne ich keine wirklich einfachen und sauberen Wege, dies zu handhaben. Eine Möglichkeit besteht darin, alle Select-HTML-Elemente mit ungeordneten Listen zu versehen, die denselben Inhalt duplizieren. Verbergen Sie die ungeordneten Listen in Ihrem normalen Anzeige-CSS, aber enthüllen Sie sie dann mit Ihrer Druck-Stylesheet. Das ist meiner Meinung nach ein vernünftiger Ansatz, außer der Tatsache, dass es eine riesige Menge Mühe ist, sich ständig damit zu befassen.
Wie wir das hier so oft tun, verlassen wir uns stattdessen auf jQuery, um die schwere Arbeit zu erledigen.
- Durchlaufen Sie jedes Select auf der Seite
- Fügen Sie danach eine DIV mit einer UL für die Optionen ein.
- Durchlaufen Sie jede Option in diesem Select und fügen Sie LI's zur UL hinzu
- Stellen Sie sicher, dass die DIV im Allgemeinen verborgen ist (display: none ist in Ordnung) und im Druck-Stylesheet angezeigt wird.
$(function(){
$("select").each(function(i){
var $el = $(this);
var $options = $el.find("option");
$el.after("<div class='print-select'>Options: <ul id=sel"+i+"></ul></div>");
var $curPrintBox = $("#sel"+i);
$options.each(function() {
$curPrintBox.append("<li>"+$(this).text()+"</li>");
});
});
});
Sehen Sie sich den Quellcode der Demoseite an, um JavaScript, CSS und HTML zusammen zu sehen.
Mit MooTools
David Walsh ist wie immer mit der gleichen Technik nur in MooTools zur Stelle.
Hey, ich habe nach so etwas gesucht!
Danke Chris (und David)!
ooo k danke, ich werde es später versuchen
schau dir meine Seite an, um sie zu sehen
Schöne Funktion, wie immer! Eine Sache, die es noch nützlicher machen könnte, ist das Hinzufügen einer weiteren ID zum li-Element, das die ausgewählte Option darstellt. :-)
wow, das ist wirklich nützlich. danke
Ich habe das Beispiel modifiziert, um alle Optionen zu drucken, aber die ausgewählte Option ist fett gedruckt (andere sind kursiv). Vielleicht ist dieses Beispiel für jemanden nützlich. Um es auszuprobieren, folgen Sie diesen Anweisungen
Fügen Sie dies zum Style für den Bildschirm hinzu
Fügen Sie dies zum Style für den Druck hinzu (.selected-Klasse muss dupliziert werden)
Die Javascript-Funktion wird wie folgt modifiziert
Ich würde eher PHP dafür verwenden als jQuery.
Erstellen Sie ein Array der Optionen, generieren Sie die und s, dann generieren Sie die versteckte .
Und wieder einmal vergesse ich, dass ich keine Tags schreiben kann.
also meine Nachricht
Ich würde eher PHP dafür verwenden als jQuery.
Erstellen Sie ein Array der Optionen, generieren Sie das Select und die Optionen, dann generieren Sie die versteckte Div.
Ja, aber das würde bedeuten, dass Sie Duplikate im HTML haben, während die jQuery-Lösung nur den geladenen DOM verändert.
Es ist ein bisschen ein Dilemma: semantisches HTML oder eine JavaScript-freie Lösung.
Matti, wenn Sie die gesamte Downloadgröße (und Anzahl der Anfragen) berechnen, werden Sie wissen, dass PHP überlegen ist. Angenommen, Sie erstellen kein internes Skriptblatt (was Sie wahrscheinlich nicht tun werden...), benötigen Sie eine weitere Anfrage dafür. Plus, wenn Sie die Größe des jQuery-Codes mit dem von PHP generierten HTML vergleichen (weil PHP-Code nicht heruntergeladen wird), werden Sie sehen, dass PHP definitiv kleiner ist.
Ich persönlich würde die PHP-Lösung verwenden, denn wenn Sie JavaScript/jQuery verwenden, muss der Benutzer nur JavaScript in seinem Browser deaktivieren und BOOM, all Ihre harte Arbeit ist dahin.
Ja, ich stimme Ihnen zu. Ich mache es auch mit PHP :)
Ich wäre eher für die serverseitige Option, aber die "minifizierte" Version ist nur 55KB (oder übersehe ich etwas), und wenn Sie bereits jQuery verwenden oder es "einfach anhängen", ist es eine einfache und elegante Lösung. Und seien wir ehrlich, JS ist Teil des Webs und ein wenig Druck zu opfern ist nicht das Schlimmste Ihres Martyriums/Ihrer Angst.
Die Verwendung von jQuery ist keine schlechte Angewohnheit, die sich festsetzt.
Dies scheint eine wirklich nützliche Technik zu sein.
Was mich jedoch dieses Mal zum Kommentieren bringt, ist etwas, das ich im Quellcode Ihrer Demo bemerkt habe.
Insbesondere
google.load("jquery", "1.3.2");
Das scheint ein wirklich nützliches Werkzeug bei der Erstellung von Konzeptseiten zu sein. Wo finde ich mehr Informationen dazu?
Mir ist aufgefallen, dass nach dem Klicken auf Absenden die Code-Tags ignoriert wurden und nur eine Zeile angezeigt wird, es sei denn, dieser Teil wartet auf die Genehmigung? Nun, lassen Sie es mich noch einmal versuchen, diesmal die Tags schummelnd
(script src="http://www.google.com/jsapi" type="text/javascript")
(/script)
(script type="text/javascript")
google.load("jquery", "1.3.2");
(/script)
Standard-Tag-Öffnung/-Schließung durch ( & ) ersetzt, außer für die google.load-Zeile, die ist wie im Code
@Ben B: Informationen zur Google AJAX Libraries API finden Sie hier: http://code.google.com/apis/ajaxlibs/
Vielleicht können wir das Attribut size verwenden?
function printpage() {
var s = document.getElementsByTagName('select');
for (var i=0; i<s.length; i++) {
s[i].size = s[i].options.length;
}
window.print();
}
Ich habe es nicht geschafft, es nach dem Drucken wieder normal zu bekommen.
Ich habe eine kleine Änderung vorgenommen, die dies auch sehr nützlich machen kann.
Wenn Sie die Zeile ändern
var $options = $el.find("option");
zu
var $options = $el.find("option:selected");
drucken Sie **NUR** das ausgewählte Element.
Gute Idee, aber wenn Sie die Div.print-Select nicht in der nicht druckbaren Version erstellen, werden Sie einige Korrekturen vornehmen.
1) In der Druckversion: select{display:none}
2) Im Skript: $(“select:hidden”).each(function(i)…
Entschuldigung für mein Englisch (
Mein einziger Kritikpunkt ist, dass Sie das System des Benutzers (egal wie geringfügig) **jedes Mal**, wenn die Seite geladen wird, belasten, unabhängig davon, ob er die Seite drucken wird oder nicht (denn wenn er nicht druckt, ist die Auswirkung dieses Codes nutzlos).
Ich frage mich, wie viel Prozent jeder Webseite, die zu einem bestimmten Zeitpunkt geladen wird, tatsächlich gedruckt wird. Meine Vermutung wäre ein winziger Betrag.
Sehr schön. Ich mag die jQuery-Lösung, besonders wenn man bedenkt, dass vielleicht 1% es drucken würde.
Ich muss Ihnen zugestehen, dass Sie einige sehr unterschiedliche Wege zur Verwendung von JavaScript/jQuery finden. Ich glaube nicht, dass ich jemals daran gedacht hätte, so etwas zu tun.
Warum nicht einfach jQuery verwenden, um das Attribut 'multiple' zu setzen?
(Klammern wären < und > )
Alle Optionen automatisch anzeigen
Das ist eine gute Idee, wahrscheinlich der sauberste Weg, es zu tun. Ich denke, um es perfekt hinzubekommen, müssten Sie sicherstellen, dass Sie die Breite des Select so einstellen, dass keine Abschneidungen entstehen (wahrscheinlich 100%).
Ich denke, eine schöne Ergänzung wäre es, das Select-Menü auch in der Druckversion des Stylesheets zu verbergen.
Das ist nett, Chris. Ich habe mir mehrere Seiten angesehen, die verschiedene Techniken verwenden, um die Tags tatsächlich zu gestalten. Hat jemand Tipps zu diesem Thema? Es scheint ziemlich intensiv zu werden, basierend auf den Seiten, die ich mir angesehen habe... Ich wollte ein einzelnes Bild im Hintergrund und CSS-Scrolling verwenden... bisher kein Glück....
Prost :D