Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.08.2012, 16:31
Аватар для woojin
Аспирант
Отправить личное сообщение для woojin Посмотреть профиль Найти все сообщения от woojin
 
Регистрация: 13.08.2012
Сообщений: 38

теги в выделенном фрагменте
приветствую!!!

у меня задача, обернуть выделенный текст спецтегом
но есть проблема, если выделение будет начинаться и заканчиваться внутри какого то тега, тогда надо чтобы открывающийся спецтег устанавливался между тегами в выделенном фрагмента

пример::: выделение начинается после "текст2" и заканчивается после "текст6"
<p>текст1
<span>текст2
{spec}
</span>
<p>текст3</p>
<p>текст4</p>
<p>текст5</p>
<span>текст6
{/spec}
</span>
текст7
</p>
вот так вот не надо что бы было
надо что бы было так:::
<p>текст1
<span>текст2</span>
{spec}
<p>текст3</p>
<p>текст4</p>
<p>текст5</p>
{/spec}
<span>текст6</span>
текст7
</p>

и по этому поводу вопрос::: как сделать так что бы скрипт обработал текст как во втором примере

извините но я не знаю вообще как это сделать так что думаю что вы предложите какой то вариант
заранее спасибо

P.S. теги могут быть абсолютно разными, не обязательно SPAN и P
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2012, 16:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от woojin
у меня задача, обернуть выделенный текст спецтегом
но есть проблема, если выделение будет начинаться и заканчиваться внутри какого то тега, тогда надо чтобы открывающийся спецтег устанавливался между тегами в выделенном фрагмента
Пример - это строка текста ? или её еще нужно извлечь из DOM ?
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2012, 17:56
Аватар для woojin
Аспирант
Отправить личное сообщение для woojin Посмотреть профиль Найти все сообщения от woojin
 
Регистрация: 13.08.2012
Сообщений: 38

нужно что бы скрипт срабатывал как в примере 2 и при этом ничего из DOM не надо
просто если получится как в примере 1 то поле отображения такой страницы на экране (всё между тегами {spec} заменяется на другой блок) может получится глюк а HTML структуре страницы
так и нужно чтобы была правильная вставка, которая в последствии не будет портить DOM
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2012, 17:57
Аватар для woojin
Аспирант
Отправить личное сообщение для woojin Посмотреть профиль Найти все сообщения от woojin
 
Регистрация: 13.08.2012
Сообщений: 38

забыл написать, обёртывание делаю вот такой функцией:::
(function($) {
  $.fn.wrapSelected = function(open, close) {
    return this.each(function() {
      var textarea = $(this);
      var value = textarea.val();
      var start = textarea[0].selectionStart;
      var end = textarea[0].selectionEnd;
      textarea.val(
        value.substr(0, start) + 
        open + value.substring(start, end) + close + 
        value.substring(end, value.length)
      );
    });
  };
})(jQuery);
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2012, 23:28
Аватар для woojin
Аспирант
Отправить личное сообщение для woojin Посмотреть профиль Найти все сообщения от woojin
 
Регистрация: 13.08.2012
Сообщений: 38

вот что выдал этот пример:::
<p>текст1
<span>текст2 </span>
{spec}
</p><p>текст3</p>
<p>текст4</p>
<p>текст5</p>
<span>текст6 </span>
{/spec}
текст7
<p></p>

перенос сработал отлично почти так как и хотелось, если бы не закрывающий </p> после открывающего {spec} и не открывающий <p> после "текст7"
может поможете исправить эту ошибку, я в рег.експах вообще ни фига не понимаю((((
Ответить с цитированием
  #6 (permalink)  
Старый 14.08.2012, 00:02
Аватар для woojin
Аспирант
Отправить личное сообщение для woojin Посмотреть профиль Найти все сообщения от woojin
 
Регистрация: 13.08.2012
Сообщений: 38

извините что непонятно, объяснил, попробую ещё раз:::
нужно чтобы выделенный текст оборачивался неким спец тегом ({spec}и{/spec}), но таким образом что бы открывающий и закрывающий спец теги не находились внутри других тегов, т.е. чтобы они к примеру не резали теги <div>, <p>, <span>, <ul> и т.д.
это нужно сделать для того чтобы в последствии обёрнутый участок текста то же был заменён, на некоторый текст (но это уже при отображении самой страницы)
в то же время {spec}и{/spec} могут находиться внутри <div>, <p>, <span>, <ul> и т.д.

так понятно?
Ответить с цитированием
  #7 (permalink)  
Старый 14.08.2012, 00:08
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от woojin
так понятно?
Так точно товарищь - задачка однако не из простых - думал только из span вынуть
Ответить с цитированием
  #8 (permalink)  
Старый 14.08.2012, 01:27
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Дзен-трансгуманист,
Туть при данной постановке задачи - рекурсия не слабая -

Воть мой предыдущий код
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>






<div id=div></div>

<script type="text/javascript">
var str='\
<div>текст1\n\
<span>текст2\n\
{spec}\n\
</span>\n\
<p>текст3</p>\n\
<p>текст4</p>\n\
<p>текст5</p>\n\
<span>текст6\n\
{/spec}\n\
</span>\n\
текст7\n\
</div>';

alert(str)

function Replac(str) {
  var a = document.getElementById( 'div' );

  $(a).append(str);

  var c=$(a).find("span").each(function() {
     var b = $(this).html();//alert('b='+b)
     if(b.indexOf('spec}')!=-1){ //alert(b)

	b = b.replace(/\s*(\{\/?spec\})\s*/ig,' ');
	$(this).text(b);
	$(this).after('\n'+RegExp["$1"]);
alert($(a).html())
     }

}); return $(a).html()}

alert(Replac(str))
</script>


Вынимал из span и переставлял за ним
А тут нужно смотреть оба тега - в одном ли теге - если нет то....
Вдобавок обёртка тегов <p> в теги <p> (в исходной строке) - некоректна - при любой перестановке - Dom нарушается <p - теги абзацев - они не могут перекрывать иные теги абзацов

А как получается при обрамлении <p> (а не div, как Выше

<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>






<div id=div></div>

<script type="text/javascript">
var str='\
<p>текст1\n\
<span>текст2\n\
{spec}\n\
</span>\n\
<p>текст3</p>\n\
<p>текст4</p>\n\
<p>текст5</p>\n\
<span>текст6\n\
{/spec}\n\
</span>\n\
текст7\n\
</p>';

alert(str)

function Replac(str) {
  var a = document.getElementById( 'div' );

  $(a).append(str);

  var c=$(a).find("span").each(function() {
     var b = $(this).html();//alert('b='+b)
     if(b.indexOf('spec}')!=-1){ //alert(b)

	b = b.replace(/\s*(\{\/?spec\})\s*/ig,' ');
	$(this).text(b);
	$(this).after('\n'+RegExp["$1"]);
alert($(a).html())
     }

}); return $(a).html()}

alert(Replac(str))
</script>
(Причём в Опере и Мозилле - траблы слегка разняться

Последний раз редактировалось Deff, 14.08.2012 в 01:31.
Ответить с цитированием
  #9 (permalink)  
Старый 14.08.2012, 10:48
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,289

Тк
Сообщение от woojin Посмотреть сообщение
(всё между тегами {spec} заменяется на другой блок
проще как-то так:
var str='\
<div>текст1\n\
<span>текст2\n\
{spec}\n\
</span>\n\
<p>текст3</p>\n\
<p>текст4</p>\n\
<p>текст5</p>\n\
<span>текст6\n\
{/spec}\n\
</span>\n\
текст7\n\
</div>';

alert(str)
function spec( str ){
	str = str.split(/\{\/?spec\}/);

	str[1] = str[1]
				.replace(/[^<>]+(?=<|$)/g,'')
				.replace(/<(\w+)[^>]*>[\s\S]*<\/\1>/g,'')
	split = str[1].search(/<\w+[^>]*>/)
	return [ 
		str[0] + str[1].substring(0,split),
		str[1].substring(split) + str[2]
	]
}

result = spec(str);
alert(result[0] + '\n{spec}\n{/spec}\n'+result[1])
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 14.08.2012, 15:03
Аватар для woojin
Аспирант
Отправить личное сообщение для woojin Посмотреть профиль Найти все сообщения от woojin
 
Регистрация: 13.08.2012
Сообщений: 38

последний пример вот что выдал
<p>текст1
<span>текст2
</span>
{spec}
{/spec}
<span>
</span>
текст7
</p>

исчезли <p> и </p> которые были между {spec} и {/spec}

может быть поможет ещё одно пояснение::: эта штука должны срабатывать в редакторе текста в админке сайта
и просто оборачивать какой то выделенный фрагмент
затем когда страница во фронт енде отображается, то плагин производит подмену текста между спец тегами
это получается типа блокировки контента до авторизации пользователя, конечно можно всё сделать и на PHP но тогда потребуется перазгрузка страницы, что не приемлимо
хочется чтоб контент разблокировался сразу, без перезагрузки

Последний раз редактировалось woojin, 14.08.2012 в 15:15.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записывать теги HTML в команде TEXT? belilo2001 jQuery 2 28.07.2011 23:19
Jquery .html() вырезает теги ART-DELI jQuery 7 18.04.2011 11:49
Убирает теги подскажите KonstantinK Элементы интерфейса 12 09.07.2010 17:43
Как текст из responseText преобразовать в теги? Бобр AJAX и COMET 24 26.02.2010 04:37
Скрыть теги OPTION в SELECT Urfin jQuery 2 30.08.2009 15:16