03.08.2016, 11:22
|
Аспирант
|
|
Регистрация: 08.03.2015
Сообщений: 78
|
|
Добавить класс для элемента
Добрый день!
У меня есть функция, которая ищет и заменяет данные, в выделенном тексте. Выгладит вот так:
function edit_shortcode_caption() {
var textarea = document.getElementById('content'),
txval = textarea.value;
var selStart = textarea.selectionStart,
selEnd = textarea.selectionEnd;
var slection = txval.substring(selStart, selEnd);
if( slection ) {
var replaced = slection
.replace(/\t/gm, " ");
textarea.value = txval.substring(0, selStart) + replaced + txval.substring(selEnd, txval.length);
selEnd = selStart + replaced.length;
}
textarea.setSelectionRange(selStart, selEnd);
}
Как мне её можно переделать, чтобы она добавляла класс .foo (если его нет), к выделенному элементу <tag>?
|
|
03.08.2016, 12:27
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
В смысле .foo? может быть class="foo", или ты хочешь прямо в поле ввода стили увидеть?
|
|
03.08.2016, 13:14
|
Аспирант
|
|
Регистрация: 08.03.2015
Сообщений: 78
|
|
Ну конечно class="foo".
<tag class="foo"> - если вообще никакого класса у тега небыло;
<tag class="bar foo"> - если какой-нибудь класс был.
Последний раз редактировалось snovapavel, 03.08.2016 в 15:08.
|
|
03.08.2016, 17:16
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Еще раз, тебе нужен класс элемента, или блин текст в тексте? Какого "не было класса" у текста, который юзер еще набирает? Нет там никаких классов кроме тех, которые в цсс для поля кто-то прописал.
Чтобы проверить есть такой текст в выделенном фрагменте или нет, надо просто сделать range.indexOf('class="foo"');
|
|
03.08.2016, 19:07
|
Аспирант
|
|
Регистрация: 08.03.2015
Сообщений: 78
|
|
Это функция, для админ панели. Нужно выделить тег и нажать на кнопку, только тогда она сработает. Она используется для размещения текста. Поэтому мне просто нужно добавить ТЕКСТОМ класс в ВЫДЕЛЕННЫЙ тег. Я могу сделать это с помощью регулярки, конечно, что-то вроде:
.replace(/\(<(.*?)( )?)?(class\=\"(.*?)\")?((.*?)?\>)?/gm, "$1class\=\"$5 foo\"\>");
Но, мне подумалось, что в JavaScript это можно сделать, как-нибудь изящнее. Я ещё не вполне его выучил, поэтому и прошу помощи. Напишите, пожалуйста, функцию...
|
|
03.08.2016, 23:58
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от snovapavel
|
ТЕКСТОМ класс в ВЫДЕЛЕННЫЙ тег
|
element.className="foo"; тебя устроит? Так добавляются классы к тегам, а ты хочешь вставить текст в кусок текста в большом тексте, где кроме текста ничего нет. Вообще посрать что именно ты хочешь вставить и что на что заменить - класс, автоваз, алюминиевый таз поменять на чугунную сковородку - это все буквы и тексты и твой "класс" блин оленевод - просто текст. То есть твое ТЗ формулируется так: к тексту <tag> надо добавить текст class="foo" между символами буквы и косой вправо.
Ну вот, я за тебя ТЗ написал, теперь все получится.
ЗЫ скачай какой-нить markdown/parsedown/slimdown которые дауны давным давно написали специально для таких вещей. Настроишь его рулезы под свои нужды и не надо будет даунские кнопки давить и операторов мучить. Она просто напишет скажем [Звоните нам:красивая_ссылка](/callback) и маркдаун все сам нарисует. Там есть опупенные дауны, ты же видел http://stackoverflow.com/ - там все на маркдауне, на википедии маркдаун, а ты кнопки давишь. Деревня. )))
Последний раз редактировалось warren buffet, 04.08.2016 в 00:04.
|
|
04.08.2016, 00:15
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от snovapavel
|
как-нибудь изящнее
|
if(range.indexOf(' class="foo">')==-1) range=range.replace('>',' class="foo">');
Изящнее некуда и все в четком соответствии с оригинальным ТЗ
Цитата:
|
чтобы она добавляла класс .foo (если его нет), к выделенному элементу <tag>
|
Фундаментальная проблема твоя в том, что без WYSWYG вся эта работа сводится к бесконечному ковырянию буковок, которые тупой юзер тут же стирает, набивает вновь, херачит пробелы как попало, скобки где хочет и хер ему чего объяснишь ибо если ты не знаешь html, то пиши в ворде, а потом экспортируй.
Ну и в каком-то смысле rich text editor есть готовый на js. Могучая хрень, с плагинами всякими.
Забыл объяснить в чем цимес маркдаунов. У них нет атрибутов, то есть там квази-атрибуты, с которыми если не человек, то машина справляется в тексте легче, чем с этой хератой типа <tag class="foo bar nah zah" id="one-two-33" onclick="{this.chenit.pokazat;}" selected>А вель хтмл это <span>дерево</small></tag> и надо контролировать все закрывашки.
Последний раз редактировалось warren buffet, 04.08.2016 в 00:22.
|
|
|
|