javascript - 在文本中查找格式化问题并从中创建元素

标签 javascript jquery html css

我想创建一个文本编辑器,它在文本中使用诸如 :strong: 之类的问题来确定格式。我有以下代码:

<?php
    $document = $_GET["document"];
    $user = $_GET["user"];
    if ($user != nil) {
        $pass = $_GET["pass"];
    }
    $pass = $_GET["pass"];
    //$conn = mysqli_connect("localhost", "levimeredith", "levimorganx2");
?>

<html>
<head>
    <title>Text Editor</title>
    <link href='https://fonts.googleapis.com/css?family=Roboto+Mono:400,300italic,300,100italic,100,700,700italic,400italic,500,500italic|Kalam:400,700,300' rel='stylesheet' type='text/css'>
    <link href="universal.css" rel="stylesheet" type="text/css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<script>
    function titleFocus() {
        $(".title").css("border", "1px solid #666666");
    }
    function titleBlur() {
        $(".title").css("border", "none");
    }
    $('.input').bind('input propertychange', function() {
        var inputString = $(".input").html();
        var inputArray = inputString.split(" ");
        var newInputArray = {};
        var onStrong = false;
        for (var i=0; i < inputArray.length; i++) {
            if (inputArray[i] == ":strong:") {
                if (onStrong == false) {
                    newInputArray[newInputArray.length] = "<strong>";
                    onStrong = true;
                } else if (onStrong == true) {
                    newInputArray[newInputArray.length] = "</strong>";
                    onStrong = false;
                }
            } else {
                newInputArray[newInputArray.length] = inputArray[i];
            }
        }
        var newInputString;
        for (var i=0; i < newInputArray.length; i++) {
            newInputString = newInputString + newInputArray[i];
            if (i != newInputArray.length - 1) {
                newInputString = newInputString + " ";
            }
        }
        $(".input").html(newInputString);
    });
    $(document).ready(function() {
        //Once DOM stuff is ready
    });
</script>
<body>
    <textarea class="title" onfocus="titleFocus()" onblur="titleBlur()">Untitled</textarea>
    <div class="toolbar">
        Testing
    </div>
    <div class="input written" contenteditable><strong>Testing </strong>Testing</div>
</body>
</html>

但是,这是行不通的。控制台根本没有显示任何错误。我哪里错了?

最佳答案

在处理(可编辑的) 时,您不应使用 $(..).val() 而应使用 $(..).html()分区

此外,使用正则表达式可以更轻松地完成您所做的字符串操作:

$('.input').bind('input propertychange', function() {
    var inputString = $(".input").html();
    var newInputString= inputString.replace(
        /:strong:(.*?):strong:/g, '<strong>$1</strong>');
    if (newInputString !== inputString) {
        console.log (newInputString);    
        $(".input").html(newInputString);
    }
});

将您的代码移至body 标记结束后,以便在您要绑定(bind)上述事件处理程序时文档存在。为了真正安全,您甚至应该将它移到 $(function () { }); 结构中,以便在真正加载文档时附加事件处理程序。

这是一个fiddle这证明了这一点。

关于javascript - 在文本中查找格式化问题并从中创建元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33709813/

相关文章:

javascript - 基于 JQuery 克隆元素构建 JSON

javascript - 提交后刷新

javascript - 在 javascript 中启用和禁用事件

html - 如何在悬停整个 anchor 时在 anchor 内制作悬停元素

javascript - 第一列和第一行被锁定的 HTML

html - 第一个 div 位于我的导航栏中?

javascript - 如何链接 Intl.Collat​​or().compare?

javascript - 如何使用后端 Node.js Express-Session 对 React 前端进行身份验证?

javascript - 错误: write EPIPE on sendFile()?

javascript - ajax请求周期自动刷新时如何使用knockout.js数据绑定(bind)?