Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态更改所见即所得的文字方向(ltr和rtl)_Javascript_Html_Wysiwyg_Right To Left - Fatal编程技术网

Javascript 动态更改所见即所得的文字方向(ltr和rtl)

Javascript 动态更改所见即所得的文字方向(ltr和rtl),javascript,html,wysiwyg,right-to-left,Javascript,Html,Wysiwyg,Right To Left,我在一个波斯语网站上使用nicEdit作为所见即所得的编辑器 内容的文本有时混合了波斯语和英语单词 波斯语是一种从右向左的语言,因此编辑器的默认方向是从右向左。然后,当一个英语单词在正文中间时, RTL 应用于它,导致误读。 例如 C#将写为#C 一种解决方案是用一个span标记将单词(例如C#)包围起来,其方向为ltr C# 但我怎样才能做到呢? 我想在编辑器按键事件中,检查输入的键是否为英语,用上面提到的跨度替换它,但我不知道怎么做 换句话说,您可以将此问题视为动态更改键入文本的背景颜色 在

我在一个波斯语网站上使用nicEdit作为所见即所得的编辑器

内容的文本有时混合了波斯语和英语单词

波斯语是一种从右向左的语言,因此编辑器的默认方向是从右向左。然后,当一个英语单词在正文中间时,<代码> RTL 应用于它,导致误读。 例如 C#将写为#C

一种解决方案是用一个span标记将单词(例如C#)包围起来,其方向为ltr C#

但我怎样才能做到呢? 我想在编辑器按键事件中,检查输入的键是否为英语,用上面提到的跨度替换它,但我不知道怎么做

换句话说,您可以将此问题视为动态更改键入文本的背景颜色

在下面,我写下了我正在尝试的东西,但是它还不起作用

    $('body').on('keypress','.nicEdit-main', function(e) {
        var c= String.fromCharCode(e.which);
        var isWordcharacter = c.match(/\w/);        
        if (isWordcharacter && !en)                                                
        {           
            en = true;
            nicEditor.nicCommand('insertHTML', '<span dir="ltr" style="direction:ltr; background-color:#eee">');
        }
        else if (!isWordcharacter)
        {
            en = false;
// need to close or escape the current span or create a new one with the opposite direction but nor works
            nicEditor.nicCommand('insertHTML', '<span dir="rtl" style="direction:rtl;>');
        }
    });
$('body').on('keypress','nicEdit main',函数(e){
var c=String.fromCharCode(e.which);
var isWordcharacter=c.match(/\w/);
if(isWordcharacter&&!en)
{           
en=真;
nicEditor.nicCommand('insertHTML','';
}
如果(!isWordcharacter),则为else
{
en=假;
//需要关闭或退出当前范围,或创建一个方向相反但不起作用的新范围
nicEditor.nicCommand('insertHTML','我准备了小提琴:

这是一个相当粗糙的示例,显示了字母和数字的不同背景。您需要对其进行一点微调,但它应该工作得很好。请注意,我不知道NicEditor,可能有更好的方法用于此库

来自fiddle的代码:

$(document).ready(function() {
    nicEditors.allTextAreas();

    var ltrSpan = $('<span style="background-color:#00ff00">');
    var rtlSpan = $('<span style="background-color:#ff0000">');

    var currentSpan = null;
    var isLtr = true;

    $('body').on('keydown','.nicEdit-main', function(e) {
        var editorArea = $(this);
        var currentChar = String.fromCharCode(e.keyCode || e.which);
        var isNumeric = currentChar.match(/\d/);

        if (isNumeric) {
            if (!isLtr) {
                isLtr = true;
                currentSpan = ltrSpan.clone();
                currentSpan.appendTo(editorArea);
            }
        } else {
            if (isLtr) {
                isLtr = false;
                currentSpan = rtlSpan.clone();
                currentSpan.appendTo(editorArea);
            }
        }

        currentSpan.append(currentChar);
        return false;
    });
});
$(文档).ready(函数(){
nicEditors.allTextAreas();
var ltrSpan=$('');
var rtlSpan=$('');
var currentSpan=null;
var isLtr=真;
$('body').on('keydown','nicEdit main',函数(e){
var editorArea=$(本);
var currentChar=String.fromCharCode(e.keyCode | | e.which);
var isNumeric=currentChar.match(/\d/);
如果(是数字){
如果(!isLtr){
isLtr=真;
currentSpan=ltrSpan.clone();
当前跨度附录(editorArea);
}
}否则{
如果(isLtr){
isLtr=假;
currentSpan=rtlSpan.clone();
当前跨度附录(editorArea);
}
}
currentSpan.append(currentChar);
返回false;
});
});

使用CSS。如果你想要更多,你需要提供你已经尝试过的任何东西。我们不是来为你做这项工作的。谢谢你,当然。我如何在光标位置找到当前方向?沿着var textDirection=$('body').CSS('direction')的线条;将保持当前方向作为变量。如果需要更具体,您可以更改选择器。这解决了问题吗?我正在研究,如果我找到解决方案,我将编写它,谢谢,这是我修改的一个旧问题,我现在不需要它,但稍后将检查您的解决方案,但正如我测试的那样,光标不在ri上右位置,我指的是打字头。@Ahmad-没问题,我知道光标的位置,这就是我为什么写微调的原因,这只是一般的想法。干杯!