gpt4 book ai didi

jquery - 获取输入中的插入符位置,以在键盘上大写单词,同时能够编辑内容

转载 作者:行者123 更新时间:2023-12-01 01:16:18 25 4
gpt4 key购买 nike

我决定提出一个新问题,因为我试图将 4 个或更多字母的单词的第一个字母大写,除了几个关键词之外,我有这个工作代码:http://jsfiddle.net/Q2tFx/11/

$.fn.capitalize = function () {
var wordsToIgnore = ["to", "and", "the", "it", "or", "that", "this"],
minLength = 3;

function getWords(str) {
return str.match(/\S+\s*/g);
}
this.each(function () {
var words = getWords(this.value);
$.each(words, function (i, word) {
// only continue if word is not in ignore list
if (wordsToIgnore.indexOf($.trim(word).toLowerCase()) == -1 && $.trim(word).length > minLength) {
words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
}
});
this.value = words.join("");
});
};

$('.title').on('keyup', function () {
$(this).capitalize();
}).capitalize();

但是我在“keyup”上运行该函数时遇到问题。 如果光标没有到达输入末尾,我就无法在输入中间编辑某些内容。而且我也无法“选择全部”

我知道有一些解决方案可以获取插入符位置并处理类似的事情,但我真的不知道如何将它们集成到我的代码中。

知道我该怎么做吗?

最佳答案

您可以使用两个函数来做到这一点,从这里:http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea

查看工作 jsfiddle: http://jsfiddle.net/Q2tFx/14/

$.fn.capitalize = function (e) {
if(e.ctrlKey) return false;
var wordsToIgnore = ["to", "and", "the", "it", "or", "that", "this"],
minLength = 3;

function getWords(str) {
return str.match(/\S+\s*/g);
}
this.each(function () {
var words = getWords(this.value);
$.each(words, function (i, word) {
// only continue if word is not in ignore list
if (wordsToIgnore.indexOf($.trim(word).toLowerCase()) == -1 && $.trim(word).length > minLength) {
words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
}
});
var pos = getCaretPosition(this);
this.value = words.join("");
setCaretPosition(this, pos);
});
};

$('.title').on('keyup', function (e) {
var e = window.event || evt;
if( e.keyCode == 17 || e.which == 17) return false;
$(this).capitalize(e);
}).capitalize();


function getCaretPosition (ctrl) {
var CaretPos = 0; // IE Support
if (document.selection) {
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
// Firefox support
else if (ctrl.selectionStart || ctrl.selectionStart == '0')
CaretPos = ctrl.selectionStart;
return (CaretPos);
}
function setCaretPosition(ctrl, pos){
if(ctrl.setSelectionRange)
{
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange) {
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}

注意

您应该将这两个函数合并到大写函数范围中

关于jquery - 获取输入中的插入符位置,以在键盘上大写单词,同时能够编辑内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14263171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com