我正在创建一个降价编辑器,我需要检查邻居字符是否是特定字符,然后删除它们,否则附加它们。
例如,我想检查所选文本,拖曳邻居字符为function getSelection(elem) {
var selectedText;
if (document.selection != undefined) { // IE
elem.focus();
var sel = document.selection.createRange();
selectedText = sel.text;
} else if (elem.selectionStart != undefined) { // Firefox
var startPos = elem.selectionStart;
var endPos = elem.selectionEnd;
selectedText = elem.value.substring(startPos, endPos)
}
return selectedText;
}
$(document).on('mousedown', 'button', function(e) {
var selection = getSelection( $('#txtarea').get(0) );
alert(selection);
});
,然后删除它们,否则将它们附加到所选文本周围。
我可以使用这种方法获得选定的文字:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="txtarea">this is a test</textarea>
<button>Bold (toggle)</button>
&#13;
**
&#13;
现在我需要当用户点击该按钮时,它会检查选定的文字是否在**selectedtext**
之间selected text
,然后像**selectedtext**
一样将其删除,否则就像这样// ----- DIAGNOSE SELECTION ----- //
var res5 = str.replace("antrian", "diagnosa").replace("periksa", "getData");
$("#diagnosa").select2({
placeholder: "Ketik untuk mencari diagnosa pasien...",
minimumInputLength: 3,
multiple: true,
ajax: {
url: res5,
dataType: 'json',
delay: 250,
data: function (params) {
return {
q: params.term // search term
};
},
processResults: function (data) {
var results = [];
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
$.each(data, function(index, item){
results.push({
id: item.kd_diagnosa,
text: item.nm_diagnosa
});
});
console.log(results);
return {
results: results
};
},
cache: true
}
});
// ----- DIAGNOSE SELECTION ----- //
1}}。我怎么能这样做?
答案 0 :(得分:1)
在此之前,我想提及那里的所有降价编辑:https://www.google.de/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=javascript%20markdown%20library
所以:不要试图重新发明轮子,等等。
但是为了学习,我的方法看起来像这样:
function toggleMarker(marker, el) {
var markerLength = marker.length;
var startPos, endPos, selection, range;
if (document.selection != undefined) { // IE
el.focus();
range = document.selection.createRange();
selection = range.text;
} else if (el.selectionStart != undefined) { // Firefox
startPos = el.selectionStart;
endPos = el.selectionEnd;
selection = el.value.substring(startPos, endPos);
}
if (!selection.length){
return;
}
if (el.value.substring(startPos-markerLength,startPos) === marker
&& el.value.substring(endPos,endPos+markerLength) === marker
){
el.value = el.value.substring(0,startPos-markerLength) +
selection +
el.value.substring(endPos+markerLength);
}
else{
el.value = el.value.substring(0,startPos) + marker +
selection + marker + el.value.substring(endPos);
}
}
$(document).on('mousedown', 'button', function(e) {
toggleMarker( $(this).data('marker'), $('#txtarea').get(0) ).text;
});
查看实际操作:https://jsfiddle.net/t4ro53v8/4/
该解决方案采用非常通用的方法:将切换标记设置为自定义数据属性,以便于重用代码。
该功能仅针对非IE案例实施。您必须检查,如何确定IE中范围的startPos和endPos。
在所有其他浏览器中:
作为概念证明,这个例子就像一个魅力。 但是有一些缺点:
但那是你现在要解决的问题......
答案 1 :(得分:0)
您可以使用正则表达式来查找** **模式的出现。这个正则表达式将帮助您找到类似于您所拥有的模式。
[*][*][a-z]*[*][*]
。
使用exec()
方法,可以帮助您提取特定文本。
使用.length
检查其长度,如果为4,则两者之间没有任何内容,您可以将其替换为**
所包围的新文本,
"**"+ newtext+"**"
要删除**,您可以使用replace()
方法,将**
替换为大约空格。