Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2016, 11:22
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 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>?
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2016, 12:27
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

В смысле .foo? может быть class="foo", или ты хочешь прямо в поле ввода стили увидеть?
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2016, 13:14
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

Ну конечно class="foo".

<tag class="foo"> - если вообще никакого класса у тега небыло;
<tag class="bar foo"> - если какой-нибудь класс был.

Последний раз редактировалось snovapavel, 03.08.2016 в 15:08.
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2016, 17:16
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Еще раз, тебе нужен класс элемента, или блин текст в тексте? Какого "не было класса" у текста, который юзер еще набирает? Нет там никаких классов кроме тех, которые в цсс для поля кто-то прописал.

Чтобы проверить есть такой текст в выделенном фрагменте или нет, надо просто сделать range.indexOf('class="foo"');
Ответить с цитированием
  #5 (permalink)  
Старый 03.08.2016, 19:07
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

Это функция, для админ панели. Нужно выделить тег и нажать на кнопку, только тогда она сработает. Она используется для размещения текста. Поэтому мне просто нужно добавить ТЕКСТОМ класс в ВЫДЕЛЕННЫЙ тег. Я могу сделать это с помощью регулярки, конечно, что-то вроде:
.replace(/\(<(.*?)( )?)?(class\=\"(.*?)\")?((.*?)?\>)?/gm, "$1class\=\"$5 foo\"\>");

Но, мне подумалось, что в JavaScript это можно сделать, как-нибудь изящнее. Я ещё не вполне его выучил, поэтому и прошу помощи. Напишите, пожалуйста, функцию...
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2016, 23:58
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 04.08.2016, 00:15
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо поправить исходник- добавить один флажок для свёртывания окна возжаждавший Общие вопросы Javascript 0 15.06.2015 15:51
Надо добавить кнопочку для загрузки фоток в фотогалерею shooriks Серверные языки и технологии 5 01.04.2015 16:04
Изменить класс элемента в зависимости от разрешения экрана funfot (X)HTML/CSS 1 19.09.2014 20:15
Добавить класс для <option> rafaello Общие вопросы Javascript 7 02.11.2013 14:15
Событие scroll для элемента div со стилем (overflow-y: hidden) yavafree jQuery 2 18.06.2013 17:27