javascript - 无法在 javascript for 循环中读取 null 的属性 'length'

标签 javascript jquery null

我正在尝试制作一个像 Stack Overflow 那样的 Markdown 编辑器。

如果我实际上没有在文本区域中键入星号和包含 http://的短语,就会在标题中列出此错误。如果我只输入一个包含星号的短语,错误指的是这一行:if(linkify.length!==0)

这是一个 jsfiddle向您展示我的意思。

这是我的 HTML:

<textarea></textarea>
<div></div><button type="button">Markdownify</button>

这是我的 JS:

var val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim),
italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim);

$(document.body).on('click', 'button', function() {

val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim),
italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim);

if (boldify.length!== 0){
            for (var i=0; i < boldify.length; i++)  {
                var boldMatch= boldify[i],  
                boldReplace = boldMatch.replace(/\*\*[A-z0-9]+\*\*/gim, '<span style="font-weight:bold;color:blue;">'+boldMatch+'</span>'),
                val = val.replace(boldMatch, boldReplace);     
            }
        val = val.replace(/\*\*/gi, "");
}

if(italicify.length!== 0){
    for(var j=0; j < italicify.length; j++){
    var italicMatch= italicify[j],
     italicReplace = italicMatch.replace(/\*[A-z0-9]+\*/gim, '<span style="font-style:italic;color:red;">'+italicMatch+'</span>');
    val = val.replace(italicMatch, italicReplace); 
    }
    val = val.replace(/\*/gi, "");
}

if(linkify.length!== 0){
    for(var k=0; k < linkify.length; k++){
    var linkMatch= linkify[k],
    linkReplace = linkMatch.replace(/http:\/\/[A-z0-9]+\.[A-z0-9]+/gim, '<a href="'+linkMatch+'">'+linkMatch+'</a>');
        val = val.replace(linkMatch, linkReplace);
    }
}

$('div').html(val);
});

如有任何帮助,我们将不胜感激。

最佳答案

不要使用 match 函数,如果字符串与提供的正则表达式不匹配则返回 null 使用 test 函数返回 true/false 然后如果你需要它您可以使用 match 函数。

基本上你正在执行 null.length 这显然是无效的因为 match 返回你一个 null

或者您可以在检查长度之前执行 null 检查,然后只执行一次正则表达式匹配。

if(linkify!==null && linkify.length!== 0)
{
  //do smthing
}

关于javascript - 无法在 javascript for 循环中读取 null 的属性 'length',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183614/

相关文章:

javascript - 如何调用多个弹出窗口?

javascript - 用于从 G Suite Admin SDK 中删除用户帐户的脚本

javascript - 在数组中的对象中添加/删除类

jquery - 幻灯片(动画)不工作

c++ - C++ 中的 NULL 和 __null 有什么区别?

c# - 我可以在 C# 中重载 "cast from null"运算符吗?

variables - 如果不检查 {{object.field}} 是否存在则出错

javascript - 使用 moment.js 按 'last month' 和 'last week' 过滤点击时的对象数组

jquery - 基于页面应用类

javascript - for循环中的jquery迭代器