我有这个function
,它在键入时检查文本区域是否包含字符串:tag:
。如果是,则将其替换为[tag] [/tag]
。例如,如果我们键入:b:
,它将插入[b] [/b]
。
这一切都很好,但是即使我们使用大写字母,我也想使它工作。就像键入:B:
也会插入[b] [/b]
(或[B] [/B]
,实际上无关紧要),但是我尝试过,但这根本不起作用。
$("textarea").on("input",function(e){
let textarea=$(this);
let text = textarea.val();
let target=e.target;
let position=target.selectionStart;
let tags=["B","I","U","S","Q",
"H1","H2","H3","H4","H5","H6",
"LEFT","CENTER","RIGHT","SUB","SUP",
"H","HR","CODE","SPOILER","UL","OL","LI"];
$.each(tags, function(index, tag) {
tag=tag.toLowerCase();
let fullTag=":"+tag+":";
if(textarea.val().toLowerCase().indexOf(fullTag) > -1 ){
textarea.val(text.replace(fullTag, "["+tag+"] [/"+tag+"]"));
target.selectionEnd=position+2;
}
});
});
textarea{
width:200px;
height:100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea></textarea>
我觉得答案实际上很简单,我已经搜索了很多,尝试了很多变化,但是我仍然无法弄清楚。因此,我希望您能在此方面为我提供帮助。
从tags
数组中,我改为构造一个不区分大小写的正则表达式:
const tags = ["B", "I", "U", "S", "Q",
"H1", "H2", "H3", "H4", "H5", "H6",
"LEFT", "CENTER", "RIGHT", "SUB", "SUP",
"H", "HR", "CODE", "SPOILER", "UL", "OL", "LI"
];
const pattern = new RegExp(tags.map(tag => `:(${tag}):`).join('|'), 'i');
$("textarea").on("input", function(e) {
let usedIndex = null;
this.value = this.value.replace(
pattern,
(_, tag) => `[${tag}] [${tag}]`
);
});
textarea {
width: 200px;
height: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea></textarea>