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

8

Dies scheint ein IE-spezifisches "Feature" zu sein. Ich habe mit IE8 getestet. Benutzer John H hat durch die Bestätigung in IE6 und IE7 beigetragen.

Ich habe etwas Text, der in meine Seite eingebaut wird und vom Beginn der Erschaffung des Elements hat es style = "display: none;"

Ich benutze jQuery nicht, um den Text auszublenden, und der Text wird nicht angezeigt. Obwohl ich zur weiteren Offenlegung auf den Inhalt des Elements zugreifen möchte, verwende ich die .html() -Methode von jQuery.

Wenn der Benutzer jedoch Text in der Nähe my display:none -Element auswählt und kopiert, was ausgewählt wurde, wird der versteckte Text eingeschlossen. Als ob es normal angezeigt worden wäre.

Das Markup sieht folgendermaßen aus:

%Vor%

Hier ist eine Geige , wo ich das Problem mit IE & lt; 9 reproduzieren kann.

Obwohl dies für diese spezielle Anwendung kein ernsthaftes Problem darstellt, hat es mich überrascht und ich habe mich gefragt, ob dies ein "Feature" ist oder ob ich etwas falsch gemacht habe.

Die meisten anderen Fragen , die ich in Bezug auf display:none gesehen habe, hatten ihre Poster " Inhalt als sichtbar. Auch hier ist mein Inhalt im Wesentlichen unsichtbar bis ausgewählt, kopiert und schließlich eingefügt.

Kann ich verhindern, dass Internet Explorer-Benutzer diesen Inhalt durch Kopieren / Einfügen finden? Ich weiß, dass sie es in den Entwicklertools sehen und die Quelle anzeigen können.

Update: Ich habe auch versucht, den Stil von visibility:hidden und z-index=-1 zu verwenden. Benutzer John H hat viele andere Versteckversuche versucht, aber IE ist bisher hartnäckig daran, diese Funktion durchzulassen. Danke für all die tollen Ideen!

Update: Vielen Dank für Ihre Anfrage Heather Walters ; Die Werte, die ich auf der Seite verwenden muss, sind nur serverseitig verfügbar, aber ich benutze sie dann nach dem Laden der Seite , um eine Verknüpfung zu generieren, die zusätzliche Verarbeitung von einem externen Programm über jQuery / AJAX verwendet. Also baue ich die Seite mit den versteckten, aber eingeschlossenen Werten und bearbeite dann diese versteckten Werte, um etwas Nützliches damit zu bauen.

Sobald ich fertig damit bin, etwas Nützliches zu bauen, merke ich jetzt, dass ich sie alle über jQuery löschen und einen zusätzlichen Performance-Hit machen könnte. Der folgende Code würde dies für alle Benutzer mit aktiviertem JavaScript erreichen:

%Vor%

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

vega , glaube ich nicht diese Lösung würde für mich funktionieren, weil ich die Seite und meinen versteckten Inhalt auf der Serverseite erstellen muss. Sie sind alle in einer serverseitigen Schleife mit möglicherweise hunderten von anderen Elementen aufgebaut, so dass ich die Wahl habe, sie entweder zu erstellen, während der Server alles in einer Tabelle auslagert (mit versteckten Elementen) oder es ein zweites Mal durchläuft (schmerzhaft) und versuchen Sie, die Elemente zu erzwingen: Keine irgendwo weniger wahrscheinlich ausgewählt werden.

Ohgodwhy , ich wollte an deine Lösung glauben. In IE8 wurde das ausgeblendete Feld nicht im Editor angezeigt. Ich war jedoch in der Lage, den Abschnitt zu kopieren und in Microsoft Word einzufügen. Es war nicht mehr versteckt.

Ein weiterer Faktor bei der Arbeit: Diese Seite ist schon ziemlich javascript-lastig, also hoffte ich, dass ich eine Lösung finden könnte, die IE daran hindert, die Werte zu sehen, ohne einen weiteren Durchlauf durch mehr als 100 mögliche Elemente hinzuzufügen ... aber ich muss es einfach tun .

Update : Robin Maben sieht so aus, als wäre es ein < em> große Problemumgehung! Sein Vorschlag besteht darin, die Werte im benutzerdefinierten HTML5-Attribut data-x zu verbergen. Dies scheint trotz meiner (wahrscheinlich) nicht HTML5-konformen Seite zu funktionieren. Bitte stimmen Sie seine Antwort ab, wenn Sie es auch als einen wertvollen Beitrag betrachten.

Aktualisieren : Bestätigt. Ich habe Mabens Vorschlag erfolgreich umgesetzt und konnte daher die Anzahl der DOM-Lookups reduzieren - eine für jedes Element auf meiner Seite. Ich habe bereits alle DIVs mit Elementen durchlaufen, die ich zeigen wollte, und jetzt kann ich automatisch auf die Dateneigenschaft gleichzeitig zugreifen. Das sieht in meiner Implementierung so aus:

%Vor%

Die Auslassungszeichen weisen auf eindeutige Vorgänge hin, die gerade ausgeführt werden. Die ID hat einen einfachen numerischen Indikator, der einen pro Datensatz erhöht.

%Vor%

Danke allen!

    
veeTrain 12.04.2012, 18:31
quelle

3 Antworten

3

Die Größenanzeige und die Position des Elements spielt keine Rolle, es wird ausgewählt, weil Sie, wenn Sie Dinge in IE & lt; 9 auswählen, HTML auswählen und dann dieses HTML mit versteckten Elementen einfügen. IE9 und andere Browser entfernen diese ausgeblendeten Elemente ordnungsgemäß aus der Auswahl. Der einzige Weg, ich von zu kennen, um es zu verhindern, ist, das versteckte Element im Dom nicht zu haben.

    
Kevin B 13.04.2012, 14:16
quelle
6

Haben Sie die Eigenschaft visibility:collapse ausprobiert?

Wenn der Teil " Value I want hidden " rein zu Berechnungszwecken verwendet wird, sollten Sie das Attribut " data " verwenden.

So

%Vor%

In jQuery sind HTML-Datenattribute automatisch über die data() api verfügbar.

Sie können

tun

someElement.data('customValue') , um einen Wert zu lesen.

und

someElement.data('customValue', newValue) , um einen Wert festzulegen.

Ich hoffe, ich habe Ihr Problem richtig analysiert.

    
Robin Maben 12.04.2012 19:11
quelle
0

Ich denke, es ist besser, wenn Sie Folgendes verwenden:

%Vor%

Damit werden mögliche IE-Probleme beseitigt.

    
fujitofu 12.04.2012 19:03
quelle

Tags und Links