Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Определение css стиля выбранного текста. (http://www.flasher.ru/forum/showthread.php?t=114152)

DJ StrikeR 20.07.2008 07:19

Определение css стиля выбранного текста.
 
Собсна, есть css, примерно с такой штукой (например):
h1 {
color:#ff0000;
font-size:24;
}

подключаем его к текстовому полю, в котором есть хтмлный текст такого рода:
<h1>Title</h1> another text <b>blah blah</b>

При выделении слова "Title" или части его, нужно что бы вывелся стиль, в котором это слово заключено (в нашем случае, это h1).

Спасибо.

iNils 20.07.2008 13:42

Простого способа нет. А сама задача совсем не простая.
К примеру усложняем задачу, есть текст "<h1><big>Title</big></h1>" и соответсвенно есть два стиля h1, big. И теперь при выборе того же слова, должно выбраться уже два стиля. А что если будет такой тест "<h1>Ti<big>tle</big></h1>"?

Опознать сами теги легко, достаточно использовать это текст для создания xml, и сам флеш создаст древовидную структуру. Остается только найти необходимое слово (задача тоже не из простых, взять хотя бы мой второй пример текст, где слово разбито над две части) и поднимаясь по дереву вверх, собрать все теги в которые слово вложено.

DJ StrikeR 21.07.2008 01:47

как всё сложно, особенно после приведённого тобою примера. А что если слово находится не просто в теге, а именно в <span>?
<span class="heading">Title</span>

облегчает ли это задачу?

iNils 21.07.2008 02:20

Простой пример, для одноуровневых тегов
Код:

var fmt:TextFormat = new TextFormat ();
fmt.size = 20;
var str:String = "<span class='a1'>Title</span> <span class='a2'>Title2</span> <span class='a3'>Title</span>";
var txt:TextField = this.createTextField ("txt", 0, 100, 100, 0, 0);
txt.html = true;
txt.border = true;
txt.autoSize = true;
txt.type = "input";
txt.setNewTextFormat (fmt);
txt.htmlText = str;
txt.onMouseUp = function () {
        var p:Number = Selection.getCaretIndex ();
        if (p > 0) {
                getClass (str, this.text, p);
        }
};
function getClass (html:String, text:String, p:Number) {
        var xml:XML = new XML (html);
        xml.ignoreWhite = true;
        var node:XMLNode = xml;
        //trace (node)
        var str:String = '';
        for (var i:Number = 0; i < node.childNodes.length; i++) {
                var nodeA:XMLNode = node.childNodes[i];
                if (nodeA.nodeType == 1) {
                        str += nodeA.firstChild.nodeValue;
                } else {
                        str += nodeA.nodeValue;
                }
                if (str.length >= p) {
                        trace ("Tag : " + nodeA.attributes["class"]);
                        break;
                }
        }
}
Mouse.addListener (txt);


DJ StrikeR 22.07.2008 03:10

большое спасибо. Теперь буду изучать твой пример.

DJ StrikeR 01.08.2008 22:59

разобравшись в примере, за который ещё раз спасибо, напросился следующий вопрос. Как применить стиль к выброннуму тексту?

flash33 02.08.2008 14:41

setTextFormat()
А вообще то F1

DJ StrikeR 02.08.2008 18:09

setTextFormat() - эт не совсем то. Если брать в расчёт пример iNils'а, то:
к слову Title применён стиль a1, каким бы образом изменить его на a2, например? Или же наоброт, добавить какой-нить текст, со стилем a1.
_txt.htmlText += "<span class='a1'>Mega text</span>" не спасает, т.е. само слово Mega text появляется, но стиль к нему не присоеденён.

wvxvw 02.08.2008 19:01

Код:

import TextField.StyleSheet;
var tf:TextField = this.createTextField("tf", 0, 0, 0, 300, 300);
var css:StyleSheet = new StyleSheet();
css.parseCSS(".a1{color:#ffff00}.a2{color:#00ffff}");
tf.styleSheet = css;
tf.html = true;
tf.htmlText = "<span class=\"a1\">This is class a1</span>";
tf.htmlText += "<span class=\"a2\">This is class a2</span>";

У меня работает...


Часовой пояс GMT +4, время: 19:15.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.