这个示例 CKEditor JavaScript 函数有什么作用

What does this sample CKEditor javascript function do?

本文关键字:函数 什么 作用 JavaScript CKEditor      更新时间:2023-09-26

MVC5

使用这个 CKEditor 文档中的信息,我最终能够集成来自 MVC 方法/视图的图像选择过程,该过程显示可以使用 CKEditor 插入文本区域的可用图像列表。

虽然最终的解决方案非常简单,但整个过程并不是特别直观。 我最终会发布我的解决方案,因为我确信许多相对较新的 MVC 编码人员(例如我自己)正在为此功能寻找简单直接的解决方案。 但与此同时,

下面的代码在上面的链接中显示了示例 2 中的相关行,略有重新排列。

<body>
  <button onclick="returnFileUrl()">Select File</button>
</body>
<script>
    function getUrlParam( paramName ) {    // Helper function to get parameters from the query string.
        var reParam = new RegExp( '(?:['?&]|&)' + paramName + '=([^&]+)', 'i' );
        var match = window.location.search.match( reParam );
        return ( match && match.length > 1 ) ? match[1] : null;
    }
    function returnFileUrl() {    // Simulate user action of selecting a file to be returned to CKEditor
        var funcNum = getUrlParam( 'CKEditorFuncNum' );
        var fileUrl = '/path/to/file.txt';
        window.opener.CKEDITOR.tools.callFunction( funcNum, fileUrl );
        window.close();
    }
</script>

我从来没有想过如何使用getUrlParam()。 我最终绕过了它,并使用已传递给我的图像选择器方法的确切参数输入了变量 funcNum。 一旦我这样做了,CKEditor的示例代码就工作得很好。

但是getUrlParam()函数在做什么呢? 我只是名义上理解正则表达式,而这个完全逃脱了我。 谁能解释为什么甚至建议它?

getUrlParam采用paramName(如http://google.com/search.php?q=term中所q),定义一个与param匹配的RegExp并将其值捕获到组1(match[1],例如 term ),由该方法返回。window.location.search获取查询字符串部分(例如 ?q=term ) 中的当前窗口 URL。

我会用更简单的正则表达式定义替换

var reParam = new RegExp( '[?&]' + paramName + '=([^&]+)', 'i');

生成的正则表达式将看起来像[?&]q=([^&]+)匹配:

  • [?&] - ?&(在您的原始代码中,它是(?:['?&]|&)的,匹配?&,或& - 因此,我建议缩短)
  • q= - 字符q=的文字顺序
  • ([^&]+) - 组 1 捕获除 & 以外的一个或多个字符。

在 VB.NET 中,您可以使用以下内容:

Private Shared Function getUrlParam(paramName As String) As String
    Dim reParam = "(?i)[?&]" & Regex.Escape(paramName) & "=([^&]+)"
    Dim match As Match = Regex.Match("http://google.com/index.php?q=term", reParam)
    If match.Success = True And match.Value.Length > 1 Then
        Return match.Groups(1).Value
    Else
        Return String.Empty
    End If
End Function

并与Dim res As String = getUrlParam("q")通话.