Versteckter Text kann trotz style = 'display: none' im IE ausgewählt werden

Dies scheint eine IE-spezifische "Funktion" zu sein. Ich habe mit IE8 getestet. NutzerJohn H hat durch Bestätigung in IE6 und IE7 dazu beigetragen.

Ich habe Text, der in meine Seite eingebaut wird, und zwar vom Beginn der Erstellung des Elements anstyle = "display: none;"

Ich verwende jQuery nicht, um den Text auszublenden, und der Text wird nicht angezeigt. Zur weiteren Offenlegung greife ich jedoch mithilfe von jQuery auf den Inhalt des Elements zu.html() Methode.

Wenn der Benutzer jedoch Text auswähltin der Nähe meinedisplay:none Wenn Sie das ausgewählte Element kopieren, wird der ausgeblendete Text eingefügt. Als ob es normal angezeigt worden wäre.

Das Markup sieht folgendermaßen aus:

<code>...
<td align="left">
    Text they should see
    <div id="whateverButUnique" style="display:none;">Value I want hidden</div>
    Some other text
</td>
</code>

Hier ist einGeige Wo kann ich das Problem mit IE <9 reproduzieren.

Dies ist zwar kein ernstes Problem für diese spezielle Anwendung, hat mich aber überrascht und ich habe mich gefragt, ob dies ein "Feature" ist oder ob ich etwas falsch gemacht habe.

Die meisten von denandere Fragen Ich habe bezüglich gesehendisplay:none hatte den Inhalt ihrer Plakate als sichtbar. Auch hier ist mein Inhalt im Wesentlichen unsichtbarbis um ausgewählt, kopiert und schließlich eingefügt.

Kann ich verhindern, dass Internet Explorer-Benutzer diesen Inhalt durch Kopieren / Einfügen finden? Mir ist klar, dass sie es in den Entwicklertools und beim Anzeigen der Quelle sehen konnten.

Aktualisieren: Dank der Kommentare anderer Benutzer habe ich auch versucht, den Stil von anzuwendenvisibility:hidden undz-index=-1. NutzerJohn H hat schon viele andere Versteckversuche unternommen, aber der IE ist bisher hartnäckig dabei, diese Funktion durchzulassen. Danke für all die tollen Ideen!

Aktualisieren: Danke für die FrageHeather Walters; Die Werte, die ich auf der Seite verwenden muss, sind nur serverseitig verfügbar, aber ich verwende sie dannNachdem die Seite geladen wurde um eine Verknüpfung mit zusätzlicher Verarbeitung von einem externen Programm über jQuery / AJAX zu generieren. Also erstelle ich die Seite mit den versteckten, aber eingeschlossenen Werten und bearbeite dann diese versteckten Werte, um etwas Nützliches daraus zu machen.

Sobald ich damit fertig bin, um etwas Nützliches zu erstellen, kann ich sie jetzt über jQuery auslöschen und einen zusätzlichen Leistungseffekt erzielen. Der folgende Code würde dies für alle tun, die Javascript aktiviert haben:

<code>$("[id^=whateverButUnique]").html("");
</code>

Mit möglicherweise Hunderten von Elementen auf der Seite ist diese zusätzliche Verarbeitung nicht ideal.

VegaIch glaube nichtdiese Lösung würde für mich funktionieren, da ich die Seite und meinen versteckten Inhalt auf der Serverseite erstellen muss. Sie sind alle in einer serverseitigen Schleife mit möglicherweise Hunderten anderer Elemente aufgebaut, sodass ich die Wahl habe, sie entweder an Ort und Stelle zu erstellen, während der Server alles in einer Tabelle anlegt (einschließlich versteckter Elemente), oder sie ein zweites Mal zu durchlaufen (schmerzhaft) und versuchen Sie, die Anzeige der Elemente zu erzwingen: Keine an einem Ort, der mit geringerer Wahrscheinlichkeit ausgewählt wird.

Oh Gott warumIch wollte an deine Lösung glauben. In IE8 wurde das ausgeblendete Feld nicht im Editor angezeigt. Ich konnte den Abschnitt jedoch kopieren und in Microsoft Word einfügen. Es wurde nicht mehr versteckt.

Ein weiterer Faktor bei der Arbeit: Diese Seite ist bereits ziemlich stark mit Javascript belastet, sodass ich hoffte, eine Lösung finden zu können, die verhindert, dass der IE die Werte sieht, ohne einen weiteren Durchgang durch mehr als 100 potenzielle Elemente hinzuzufügen.

Aktualisieren: Robin Maben's Vorschlag sieht aus wie es sein wirdgroßartig Problemumgehung! Sein Vorschlag ist, die Werte in der zu verbergendata-x benutzerdefiniertes HTML5-Attribut. Dies scheint trotz meiner (höchstwahrscheinlich) nicht HTML5-konformen Seite zu funktionieren. Bitte stimmen Sie seine Antwort ab, wenn Sie sie auch für einen wertvollen Beitrag halten.

Aktualisieren: Bestätigt. Ich habe den Vorschlag von Maben erfolgreich umgesetzt und konnte daher die Anzahl der DOM-Suchvorgänge verringern - einen für jedes Element auf meiner Seite. Ich habe bereits alle DIVs mit Elementen durchlaufen, die ich anzeigen wollte, und jetzt kann ich gleichzeitig automatisch auf die Dateneigenschaft zugreifen. In meiner Implementierung sieht das so aus:

<code><div style="display:none" data-call-number="..." id="stackLocatorLinkFillUp...">...</div>
</code>

Die Auslassungspunkte geben an, welche Vorgänge für mich ausgeführt werden. Die ID verfügt über einen einfachen numerischen Indikator, der einen pro Datensatz erhöht.

<code>// Loop through all of the items on the page that start with my id
$("[id^=stackLocatorLinkFillUp]").each( function() {
    // ...
    // Grab the contents of the div
    var innerContent = $(this).html();
    // Extract the call number out of the data-call-number field
    var callNumPreEncoded = $(this).data("callNumber");
    // ...eventually...
    $(this).html(...).css("display","block");
});
</code>

Vielen Dank an alle!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage