javascript - 在 textarea 中找到 "line-breaks"是阿拉伯文字换行

标签 javascript textarea word-wrap

我有一个显示在文本区域(从右到左方向)中的文本字符串。用户可以动态调整文本区域的大小(为此我使用 jquery),文本将根据需要换行。

当用户点击提交时,我将采用该文本并使用 PHP 创建图像,但在提交之前我想知道“换行符”或“自动换行”发生的位置。

到目前为止,我所看到的所有地方都只向我展示了如何在 php 端处理换行符。我想明确表示没有换行符。我所拥有的是一个 LONG 字符串,它将根据用户设置的文本区域的宽度以不同的方式进行换行。

我不能使用“列”或任何其他标准宽度表示,因为我有一个非常复杂的阿拉伯字体,它实际上由许多不同宽度的字形(字符)组成。

如果有人知道一种访问自动换行位置的方法(如果需要,可以在文本区域或 div 中),我真的很想知道。

我唯一的其他解决方案是实际存储(在我的数据库中)每个字符的宽度(有点乏味,因为有 600 多种不同字体的 200 多个字符,总共......一些巨大的数字)。

我的希望不高,但我想我会问。

谢谢

我。贾马尔

最佳答案

好吧,不用找到换行符(这实际上是不可能的),您可以强制它们进入文本区域,使用这个函数:

function ApplyLineBreaks(strTextAreaId) {
    var oTextarea = document.getElementById(strTextAreaId);
    if (oTextarea.wrap) {
        oTextarea.setAttribute("wrap", "off");
    }
    else {
        oTextarea.setAttribute("wrap", "off");
        var newArea = oTextarea.cloneNode(true);
        newArea.value = oTextarea.value;
        oTextarea.parentNode.replaceChild(newArea, oTextarea);
        oTextarea = newArea;
    }

    var strRawValue = oTextarea.value;
    oTextarea.value = "";
    var nEmptyWidth = oTextarea.scrollWidth;
    var nLastWrappingIndex = -1;
    for (var i = 0; i < strRawValue.length; i++) {
        var curChar = strRawValue.charAt(i);
        if (curChar == ' ' || curChar == '-' || curChar == '+')
            nLastWrappingIndex = i;
        oTextarea.value += curChar;
        if (oTextarea.scrollWidth > nEmptyWidth) {
            var buffer = "";
            if (nLastWrappingIndex >= 0) {
                for (var j = nLastWrappingIndex + 1; j < i; j++)
                    buffer += strRawValue.charAt(j);
                nLastWrappingIndex = -1;
            }
            buffer += curChar;
            oTextarea.value = oTextarea.value.substr(0, oTextarea.value.length - buffer.length);
            oTextarea.value += "\n" + buffer;
        }
    }
    oTextarea.setAttribute("wrap", "");
}

此函数获取文本区域的 ID,只要有自动换行,它就会将换行符插入文本区域。在表单提交中运行该函数,您将在服务器端代码中获得带有适当换行符的文本。

已在 IE、Chrome 和 Firefox 上成功测试,您可以在这里自行查看:http://jsfiddle.net/yahavbr/pH79a/1/ (预览会显示新行)

关于javascript - 在 textarea 中找到 "line-breaks"是阿拉伯文字换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719777/

相关文章:

php - 如何在textarea中替换\r\n

javascript - Angular JS 和复杂指令

javascript - HTML 背景图片加载

JavaScript 闭包 __proto__

javascript - 以编程方式调整文本区域的大小而不修改最小大小

html - 使用 html 和 css(无 javascript)只能将 255 个字符输入到文本区域

ios - UITextView 禁用换行

c# - 如何在 .NET 中自动换行注释?

flutter - 避免长断词

javascript - 使用 AngularUI 作为热键