BBCode

Статус
Закрыто для дальнейших ответов.

Nordway

Active Member
Регистрация
06.08.2007
Сообщения
41
Помогите пожалуйста...
В форме нужно сделать BB символы - жирный, курсив, подчёркнуто, новая строка, центр, лево, право и всё.
может быть есть где готовый скриптик

Пробовал сам, но пока не оч получается. Чтобы поместить слово в тег нужно сначала нажать тег - потом слово - потом закруть тег. а хотелось бы чтобы просто выделить слово - нажать тег и он сам туда поместит всё. А было б ещё прекрасно еслиб ещё в самом поле где сообщения набираются сами теги не отображались, а просто сразу "делали своё дело" :)

Думаю достаточно будет хотябы пример с работой одно кнопки, например b

Вот пример моего, мб кто поможет доделать ну или предложит более лучший вариант)

Код:
<form>
<input id="uTag" type="button" value="Подчёркнутый" style="font-style: underline;" onClick="tag(this)">
<textarea id="text" name="info" rows="15" cols="94"></textarea><br>
</form>

<script language='JavaScript'>
<!--
function tag(tag)
{
		var text = document.getElementById("text");
		if (tag.id == 'bTag')
		{
				(tag.id == 'uTag')
				{
						if (tag.value == 'Подчёркнутый')
						{
									text.value += '<u>';
									tag.value = 'Подчёркнутый *';
						}
						else
						{
									text.value += '</u>';
									tag.value = 'Подчёркнутый';
						}
				}
		
		}
}
-->
</script>
Заранее спасибо!:)
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Извняюсь за неаккуратость, но вот, что получилось вроде работает как просили.

[codebox]<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<script language="javascript" type="text/javascript">
<!--
var txt;
function bb_code() {
var area = document.getElementById('text_box');
var value = area.value;

/* IE */
if( ! area.selectionStart && document.selection )
{
var range = document.selection.createRange();
var stored_range = range.duplicate();
stored_range.moveToElementText( area );
stored_range.setEndPoint( 'EndToEnd', range );

var Start = stored_range.text.length - range.text.length;
var End = Start + range.text.length;

txt = value.substring( Start,End );
/* /IE */
} else {

txt = value.substring( area.selectionStart,area.selectionEnd );
}

var begin = "";
var end = "
";

var bb_text = begin + txt + end;
var results = value.replace(txt,bb_text);
area.value = results;
}
//-->
</script>
</head>

<body>
<form name="form1">

<a href="java script:bb_code();"><img src="#" alt="Bold" border="0"></a><br>

<textarea rows="8" cols="60" id="text_box">
</textarea>
</form>
</body>
</html>[/codebox]
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
И чтоб в IE сохранить выделенный текст в переменную стоко гемороя, ппц. В коде увидишь. Для IE не писал сам, взял на форуме, а остольное сам.
И потестируй в разных браузерах. :biggrin: :rolleyes:
 

Nordway

Active Member
Регистрация
06.08.2007
Сообщения
41
Выделил - вставил - запустил.
Пишу к примеру 1234, жму кнопку переходит на ссылку http://****/test/java%20script:bb_code(); ну и естественно ничего хорошего + ошибка на странице)
убрал пробел в ссылке, пробую - набираю 123 - выделя - жму кнопку, ничего не происходит и появляется ошибка на странице внизу браузера...
так же получается если ничего не писать а сразу нажать...

Тестировал в дефолтовом браузере Висты.

Мб я не так скопировал или ещё что-то где-то нужно прорисовать?)

мб есть ссылка на какой-нить ресурс где показывают как делать ну или там встроенная форма уже и мб оттуда срисовать =\
 

Nordway

Active Member
Регистрация
06.08.2007
Сообщения
41
Код:
&lt;script language="javascript" type="text/javascript">
<!--
var txt;
function bb_code()
{
var area = document.getElementById('text_box');
var value = area.value;
txt = value.substring( area.selectionStart,area.selectionEnd );
var begin = "<b>";
var end = "</b>";
var bb_text = begin + txt + end;
var results = value.replace(txt,bb_text);
area.value = results;
}
//-->
</script>
спасибо за код!)

вот так стало подавать признаки жизни, НО
пишу 1234, нажимаю на кнопку - выделяет <b>1234</b>. Курсор стоит после закрывающего тега, жму снова на кнопку он мне ещё раз 1234 выделяет, т.е. получается <b><b>1234</b></b>

как это починить?

И всё-таки мучает вопрос (чисто ради интереса): как сделать динамическую панель форматирования)) чтобы сразу результат, хотябы 1 примерчик на какой-нибудь функции, самый лёгкий)
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Странно. Может потому-что поля в переменных begin u end пустые.
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
[codebox]<script language="javascript" type="text/javascript">
<!-- var txt;
function bb_code() {
var area = document.getElementById('text_box');
var value = area.value;

/* IE */

if( ! area.selectionStart && document.selection ) {
var range = document.selection.createRange();
var stored_range = range.duplicate();
stored_range.moveToElementText( area );
stored_range.setEndPoint( 'EndToEnd', range );
var Start = stored_range.text.length - range.text.length;
var End = Start + range.text.length;
txt = value.substring( Start,End );

/* /IE */

} else {
txt = value.substring( area.selectionStart,area.selectionEnd );
}
var begin = "";
var end = "";
var bb_text = begin + txt + end;
var results = value.replace(txt,bb_text);
area.value = results;
}
//-->
</script>[/codebox]

Странно. Может потому-что поля в переменных begin u end пустые. Просто я в них вписыаю "","", но скрипт на форуме не пропускает, т.к это BBcode. Впиши сам и поидее это должно работать. Еще твой код запустил в IE 7, он неправильно пашет, помещает в bb_code не в выделенный текст, а во весь текст.
Вот я про - это и говрил, что нуно писать отдельно для IE, чтоб правильно пахало.
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
А над динамической панелью поработаю.
 

Nordway

Active Member
Регистрация
06.08.2007
Сообщения
41
сразу говорю не мой))) работает хорошо, т.е. помещает в теги то что выделено, мб как то на основе этого сделать динамическую))

Код:
<form>
 <input type="button" onClick="insTxt()" onmouseover="copyT('B')" value="B">
 <br>
 <textarea cols="70" rows="8" name="Post" id="tex" onselect="storeCaret(this);" onClick="storeCaret(this);" onkeyup="storeCaret(this);" onfocus="storeCaret(this);"></textarea>
</form>
<script language="javascript">
function copyT(code)
{if (typeof(document.getElementById('tex').caretPos) != 'undefined'){
if (window.getSelection) {text=window.getSelection()}
else if (document.selection) {text=document.selection.createRange().text;}
text='['+code+']'+text+'[/'+code+']'
}
else if (typeof(document.getElementById('tex').selectionStart) != 'undefined')
{
text = document.getElementById('tex').value.substring(document.getElementById('tex').selectionStart,document.getElementById('tex').selectionEnd)
text='['+code+']'+text+'[/'+code+']'
}
}
function storeCaret(element)
{
if (typeof(document.selection) != 'undefined' && typeof(document.selection.createRange) != 'undefined')
element.caretPos=document.selection.createRange().duplicate();
}
function insTxt()
{ var element = document.getElementById("tex")
if (!element)
return;
element.focus();
if (typeof(element.caretPos) != 'undefined')
element.caretPos.text = text;
else if (typeof(element.selectionStart) != 'undefined')
{
var newPos = element.selectionEnd + text.length;
element.value = element.value.substring(0, element.selectionStart) + text + element.value.substring(element.selectionEnd, element.value.length);
element.setSelectionRange(newPos, newPos);
}
else
element.value += text;
}
</script>
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Я свой код еще в Opere 9.23 запустил, не пашет, текст в переменную не сохранят почему-то.

И твой код запустил, который ты выше выложил, он тоже в Opere 9.23 не пашет.
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Вот написал, что ты просил. Вроде получилось как ты хотел.

Токо ссылки необрабатывается. Ну там еще в функции "revision" подправишь, а то там поля пустые, форум не пропускает.

[codebox]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>BB_code</title>
&lt;script language="javascript" type="text/javascript">
<!--
var txt = "";
var results = "";

function bb_code(code) {
var area = document.getElementById('text_box');
var value = area.value;

/* IE */
if( ! area.selectionStart && document.selection )
{
var range = document.selection.createRange();
var stored_range = range.duplicate();
stored_range.moveToElementText( area );
stored_range.setEndPoint( 'EndToEnd', range );

var Start = stored_range.text.length - range.text.length;
var End = Start + range.text.length;

txt = value.substring( Start,End );
/* /IE */
} else {

txt = value.substring(area.selectionStart,area.selectionEnd);
}


var bb_text = "[" + code + "]" + txt + "[/" + code + "]";
results = value.replace(txt,bb_text);
area.value = results;
}
function bb_link() {
var area = document.getElementById('text_box');
var txt_url = prompt("Введите полный адресс ссылки","http://");
var txt_text = prompt("Введите текст ссылки","Сайт");
if(txt_url != "" && txt_text != "") {
bb_url = "" + txt_text + "";
area.value += bb_url;
} else {
alert("Вы не заполнели поля");
}
}
function revision() {
var area = document.getElementById('text_box');

var res_end = area.value.replace("","<b>");
res_end = res_end.replace("
","</b>");
res_end = res_end.replace("","<i>");
res_end = res_end.replace("
","</i>");
res_end = res_end.replace("","<u>");
res_end = res_end.replace("
","</u>");
res_end = res_end.replace("","<s>");
res_end = res_end.replace("
","</s>");

document.getElementById('results').innerHTML = res_end;
}
//-->
</script>
</head>

<body>
<form name="form1">

<a href="java script:bb_code('b');"><img src="#" alt="Bold" border="0"></a><a href="java script:bb_code('i');"><img src="#" alt="Italic" border="0"></a><a href="java script:bb_code('u');"><img src="#" alt="Подчеркнутый" border="0"></a><a href="java script:bb_code('s');"><img src="#" alt="Перечеркнутый" border="0"></a><a href="java script:bb_link();"><img src="#" alt="Вставить ссылку" border="0"></a><br>

<textarea rows="8" cols="60" id="text_box">
</textarea>
<br>
<input type="button" value="Посмотреть" onClick="revision();">
</form>

<div id="results"></div>

</body>
</html>
[/codebox]
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Всегда рад помоч. :biggrin:
 
Статус
Закрыто для дальнейших ответов.
Верх Низ