首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP解析JQuery文档以组合$( JavaScript ).ready函数

使用PHP解析JQuery文档以组合$( JavaScript ).ready函数
EN

Stack Overflow用户
提问于 2017-09-28 20:57:15
回答 1查看 73关注 0票数 0

我使用基于PHP的系统从模板和一系列包含的文件生成HTML页面。

任何脚本(无论是链接的还是内联的)都是从这些includes中提取出来的,并放在生成的页面的开头或结尾。

内联脚本被合并到单个内联脚本中。

这一切都运行得很好。

我唯一缺少的是一种将多个$(文档).ready jQuery函数组合成一个函数的方法。

虽然它有多个函数可以很好地工作,但为了美观和可靠性,如果有一个$(文档).ready函数就更好了。

举个例子,我希望能够解析这段代码:

代码语言:javascript
复制
<script language="javascript" type="text/javascript">
$(document).ready(function() {
    $('.icheck').iCheck({
        checkboxClass: 'icheckbox_minimal-green',
        radioClass: 'iradio_minimal-green',
    });
    $('.icheckblack').iCheck({
        checkboxClass: 'icheckbox_minimal',
        radioClass: 'iradio_minimal',
    });
});
$(document).on("eldarion-ajax:begin", function(evt, $el) {
    $(".noData").remove();
    $("#" + $el.data("bq")).show();
});
$(document).ready(function() {
    $(".commentToggle").each(function(index) {
        $(this).click(function() {
            var tl_id = $(this).data('tl_id');
            $("#commentForm" + tl_id).toggle();
        });
    });

});
$(function() {
    $('#email_content').redactor();
});
</script>

如下所示:

代码语言:javascript
复制
<script language="javascript" type="text/javascript">
$(document).on("eldarion-ajax:begin", function(evt, $el) {
    $(".noData").remove();
    $("#" + $el.data("bq")).show();
});

$(function() {
    $('#email_content').redactor();
});

$(document).ready(function() {
    $(".commentToggle").each(function(index) {
        $(this).click(function() {
            var tl_id = $(this).data('tl_id');
            $("#commentForm" + tl_id).toggle();
        });
    });
    $('.icheck').iCheck({
        checkboxClass: 'icheckbox_minimal-green',
        radioClass: 'iradio_minimal-green',
    });
    $('.icheckblack').iCheck({
        checkboxClass: 'icheckbox_minimal',
        radioClass: 'iradio_minimal',
    });

});
</script>

我看到过类似的问题,但还没有得到真正的回答,但我已经指出了Tim Whitlock's jParser的方向,但这并没有很好的记录,似乎对我的需求来说有点过头了。

我考虑过使用一些基于preg_match_all的东西,但我认为JavaScript在结构/格式上不够一致,这是不可靠的。

EN

回答 1

Stack Overflow用户

发布于 2017-09-28 22:44:05

我曾经做过类似的事情。等我有时间的时候,我会试着弄到一些伪代码。但是它的要点是您读取$(document).ready(function() {文件并逐行迭代它,并使用preg_match来精确匹配javascript。一旦匹配了该行,就开始将随后的每一行记录到一个字符串中。此字符串将记录document ready中的所有函数。

然后,创建一个$counter变量,该变量将计算开括号和闭括号的数量,并在默认情况下将其设置为1。然后,在遍历各行时,对开括号(执行一个preg_match_all,对闭括号)执行另一个preg_match_all,并计算每行中每个开/闭括号的匹配数。对于每个左括号,将$counter变量递增1,对于每个右括号,将$counter变量递减-1。然后,在每一行之后,检查当前变量计数器,看看它是否为0。一旦它为0,就意味着原来的$(document).ready(function() {已经关闭了。解析完所有文件并记录了$(document).ready语句中的所有函数后,将它们添加到您自己的$(document).ready字符串中。

当然,这假设javascript文件没有缩小,并且$(document).ready语句在各自单独的行上开始和结束。如果文件被缩小或格式不正确,那么您将需要用strpos()做一些更复杂的事情。无论出于何种原因,如果在')'这样的字符串中存储了一个左括号或右括号,则此方法将会出现问题。但是如果你不认为这会是一个问题,那么这应该足够好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46469772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档