Eigentlich sind alle Zeichen Unicode, zumindest aus Sicht der Javascript-Engine.
Leider reicht das bloße Vorhandensein von Zeichen in einem bestimmten Unicode-Bereich nicht aus, um festzustellen, dass Sie mehr Platz benötigen. Es gibt eine Reihe von Zeichen, die ungefähr die gleiche Menge an Platz beanspruchen wie andere Zeichen, deren Unicode-Codepunkte weit über dem ASCII-Bereich liegen. Typografische Anführungszeichen, Zeichen mit diakritischen Zeichen, bestimmte Interpunktionssymbole und verschiedene Währungssymbole liegen außerhalb des niedrigen ASCII-Bereichs und werden auf der Unicode-Basisebene für mehrere Sprachen an ganz unterschiedlichen Stellen zugeordnet.
In der Regel entscheiden sich die Projekte, an denen ich gearbeitet habe, dafür, zusätzlichen Platz für alle Sprachen zur Verfügung zu stellen, oder verwenden manchmal Javascript, um festzustellen, ob ein Fenster mit css-Attributen für die automatische Bildlaufleiste tatsächlich einen Inhalt mit einer Höhe hat, die eine Bildlaufleiste auslösen würde oder nicht.
Wenn die Erkennung des Vorhandenseins oder der Anzahl von CJK-Zeichen ausreicht, um festzustellen, dass Sie ein wenig mehr Platz benötigen, können Sie eine Regex mit den folgenden Bereichen erstellen: [ \u3300 - \u9fff\uf900 - \ufaff ], und verwenden Sie diese, um die Anzahl der übereinstimmenden Zeichen zu extrahieren. (Dies ist ein wenig zu grob und lässt alle Nicht-BMP-Fälle aus, schließt wahrscheinlich einige andere relevante Bereiche aus und enthält höchstwahrscheinlich einige irrelevante Zeichen, aber es ist ein Ausgangspunkt).
Auch hier werden Sie nur in der Lage sein, eine grobe Heuristik ohne etwas in der Art einer vollständigen Text-Rendering-Engine zu verwalten, denn was Sie wirklich wollen, ist etwas wie GDI's MeasureString (oder jede andere Text-Rendering-Engine-Äquivalent). Es ist eine Weile her, seit ich das getan habe, aber ich denke, das nächste HTML/DOM-Äquivalent ist die Einstellung einer Breite auf ein div und die Höhe anfordern (Ausschneiden und Einfügen Wiederverwendung, so Entschuldigungen, wenn dies Fehler enthält):
o = document.getElementById("test");
document.defaultView.getComputedStyle(o,"").getPropertyValue("height"))
0 Stimmen
Nun, ich hatte erwartet, dass das funktioniert. Aber es funktionierte nicht im IE. Ich vermute, dass es Layout-Probleme gibt. Wie auch immer, da der Code zum Berechnen der Länge und Höhe/Breite des anzuzeigenden Textes bereits vorhanden war, ging ich mit dem Code weiter, der nur herausfindet, ob ein Doppelbyte-Zeichen vorhanden ist oder nicht. Und das war die Lösung.
0 Stimmen
Mit HTML5 können Sie den Kontext eines Canvas-Elements (
var ctx = canvas.getContext('2d')
), um die Breite der Textmetrik zu erhalten.var text_width = ctx.measureText(text).width;
Ich bin nicht sicher, wie gut diese Methode mit Unicode-Zeichen funktioniert, und es ist eine Schande, dass allemeasureText
Methode gibt derzeit die Breite zurück.