テキスト内のタグを検出して置換するためにテストと置換メソッドを使用していますが、置換メソッドはタグに関連付けられたテキストを返しますが、タグなしでテキストを返す必要があります! なぜ?
私のjqueryプラグイン:
jQuery.fn.extend({
insertTag: function(Tag){
var pattern = new RegExp("\[("+Tag+")\](.*?)\[\/("+Tag+")\]","gi");
return this.each(function (i) {
var sel,ptrn;
if (document.selection) {
this.focus();
sel = document.selection.createRange();
sel.text = '['+Tag+']' + sel.text + '[/'+Tag+']';
}
else if (this.selectionStart || this.selectionStart == '0') {
this.focus();
var startPos = this.selectionStart, endPos = this.selectionEnd;
sel = this.value.substring(startPos, endPos);
alert(sel); // show seleced text for debug ing!
if(pattern.test(sel)){
txt = sel.replace(pattern,"$1");
alert(txt); // show replaced text for debug ing!
this.value = this.value.substring(0, startPos) + (txt) + this.value.substring(endPos, this.value.length);
}else{
this.value = this.value.substring(0, startPos) + ('['+Tag+']' + sel + '[/'+Tag+']') + this.value.substring(endPos, this.value.length);
}
}
})
}
});
存在する場合、選択したテキストのタグを削除するためのこのセクション:
if(pattern.test(sel)){
txt = sel.replace(pattern,"$1");
alert(txt); // show replaced text for debug ing!
this.value = this.value.substring(0, startPos) + (txt) + this.value.substring(endPos, this.value.length);
}
しかし、うまく動かない……。
例えば :
txt = $("#txt");
txt.insertTag(b) :
[b]some text[/b]
txt.insertTag(b) :
[]some text[/b]
「あるテキスト」に戻りながら
ご協力いただきありがとうございます :)