老师,关于代码优化

老师,关于代码优化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>正则表达式测试工具</title>
    <style>
        #RegExp{
            width: 650px;
            margin: 100px auto;
            font-size: 14px;
        }
        #RegExp .title{
            color: #777;
            font-size: 24px;
            text-align: center;
        }
        #RegExp .textbox{
            width: 638px;
            height: 150px;
            border: 1px solid #ccc;
            border-radius: 5px;
            padding: 5px;
            resize: none;   
        }
        #RegExp .readOnly{
            background: #eee;
        }
        #RegExp .textfield{
            width: 215px;
            padding: 5px;
            border: 1px solid #ccc;
        } 
    </style>
</head>
<body>
    <div id="RegExp">
        <h1 class="title">正则表达式测试工具</h1>
        <textarea id="userText" class="textbox" placeholder="在此输入带匹配的文本"></textarea>
        <p>
            正则表达式:<input type="text" id="userRegExp" class="textfield" placeholder="在此输入正则表达式">
            <input type="checkbox" name="userModifier" value="i">忽略大小写
            <input type="checkbox" name="userModifier" value="g">全局匹配
            <input type="checkbox" name="userModifier" value="m">多行匹配
            <input type="button" value="测试匹配" id="matchingBtn">
        </p>
        匹配结果:
        <div id="matchingResult" class="textbox readOnly"></div>
        <p>
            替换文本:<input type="text" id="userReplaceText" class="textfield" placeholder="在此输入替换文本">
            <input type="button" value="替换" id="replaceBtn">
        </p>
        替换结果:
        <div id="replaceResult" class="textbox readOnly"></div>
    </div>
    <script>
        var userText = byId("userText"),
            userRegExp = byId("userRegExp"),
            userModifier = document.getElementsByName("userModifier"),
            matchingBtn = byId("matchingBtn"),
            matchingResult = byId("matchingResult"),
            userReplaceText = byId("userReplaceText"),
            replaceBtn = byId("replaceBtn"),
            replaceResult = byId("replaceResult");
        var pattern,
            modifier = '';
        //封装getElementById
        function byId(id){
            return typeof(id)==="string"?document.getElementById(id):id;
        }
        //模式修饰符igm的判断
        for(var i = 0; i < userModifier.length; i++){
            userModifier[i].onclick = function () {
                modifier = '';
                for(var j = 0; j < userModifier.length; j++){
                    if(userModifier[j].checked){
                        modifier += userModifier[j].value;
                    }
                }
            }
        }
        //检测是否输入
        function checkInput(inputText){
            if(!inputText.value){
                if(inputText==userText){
                    alert("请输入待匹配的文本!");
                }else if(inputText==userRegExp){
                    alert("请输入正则表达式!");
                }else if(inputText==userReplaceText){
                    alert("请输入替换文本!");
                }
                inputText.focus();
                return;
            } 
        }
        //结果输出
        function resultInput(inputText){
            pattern = new RegExp('('+userRegExp.value+')',modifier);
            inputText.innerHTML = pattern.exec(userText.value) ?userText.value.replace(pattern,"<span style='background-color:yellow;'>$1</span>"):'(没有匹配)';
        }
        //给测试匹配按钮绑定点击事件
        matchingBtn.onclick = function () {
            //检测是否输入了待匹配文本
            checkInput(userText);
            //检测是否输入了正则表达式
            checkInput(userRegExp);
            resultInput(matchingResult); 
            // matchingResult.innerHTML = pattern.exec(userText.value) ||'(没有匹配)';
            //短路操作,如果匹配得到,返回匹配的内容;如果未匹配得到,返回(没有匹配)
        }
        //给替换按钮绑定点击事件
        replaceBtn.onclick = function () {
            checkInput(userText);
            checkInput(userRegExp);
            //检测是否输入了替换文本
            checkInput(userReplaceText);
            pattern = new RegExp('('+userRegExp.value+')',modifier);
            replaceResult.innerHTML = userText.value.replace(pattern,"<span style='color:red;'>"+ userReplaceText.value +"</span>"); 
        }
    </script>
</body>
</html>

我对getElementById进行了封装,还将检测是否输入相关文本的重复字段进行了提取,

在对结果输出部分进行函数封装时遇到了小困难,可以怎么整合代码?

除了我提到的这个问题之外,还有什么部分还可以优化吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕言 2019-10-31 16:51:59

同学你好,这样写就很简便了,不用再封装了。祝学习愉快~

好帮手慕言 2019-10-31 15:41:13

同学你好,同学提到的“在对结果输出部分进行函数封装时遇到了小困难”是什么困难呢,测试代码是可以的哦,这样写是很简洁了哦。

测试同学提供的代码,效果实现的是可以的,代码也很简洁了。

祝学习愉快~

  • 提问者 林迦叶 #1
    我想要将两个点击事件中结果输出部分用一个函数封装,但是不知道怎么改,因为考虑到如果分装成一个通过if之类的判断语句是不是反而将代码复杂化
    2019-10-31 15:47:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师