重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

javascriptでテキストエリアに独自タグを挿入したいと思ってます。
テキストエリアで選んだ文字を独自タグで囲むことまでできましたが
続けて囲いたい場合([b][d]****[/d][/b])に2回目の挿入が選択した文字だけでなく文全体になってしまいます。([b]**************[d]****[/d]*****[/b])
それと選択文字のない場合はカーソルの位置に
([d]打ち消し文字[/d])というように表示したいのに、カーソルの位置を無視して文章の一番最後に挿入されてしまういます。カーソルの位置に挿入するにはどうしたらいいでしょうか?
カーソルの位置に挿入さえ正常になれば([d]打ち消し文字[/d])の形でなく([d][/d])でもかまいません。
大変困ってます。よろしくお願いします。

function InsertText(domobj, text)
{
if (domobj.createTextRange && domobj.caretPos){
var caretPos = domobj.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1)
== ' ' ? text + ' ' : text;
} else if (domobj.getSelection && domobj.caretPos){
var caretPos = domobj.caretPos;
caretPos.text = caretPos.text.charat(caretPos.text.length - 1)
== ' ' ? text + ' ' : text;
} else {
domobj.value = domobj.value + text;
}
}

function CodeLinethrough(id){
var select = document.selection.createRange();
var domobj = GetElementById(id);
if(select.text == ""){
result = "[d]打ち消し文字[/d]";
InsertText(domobj, result);
}else{
select.text = "[d]" + select.text + "[/d]";
InsertText(domobj, select.text);
}
domobj.focus();
}

A 回答 (1件)

http://painter.homeip.net/~raelian/tag/enclose.h …
が参考になると思います。
>選択文字のない場合
textRange オブジェクトが使えないので、置き換えるべき文字がないですよね。
参考URLの場合、onmouseup イベントなどでカーソルが移動した時にその時のカーソル位置を記録するようになっています。
カーソル位置が分かっていれば、substring で文字を挿入することができます。
    • good
    • 0
この回答へのお礼

他にもいろいろ調べてみましたが、どうも私の環境では無理そう(HTML側で修正が必要)なので他の手段をとります。ありがとうございました。

お礼日時:2006/08/20 18:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!