我使用基于PHP的系统从模板和一系列包含的文件生成HTML页面。
任何脚本(无论是链接的还是内联的)都是从这些includes中提取出来的,并放在生成的页面的开头或结尾。
内联脚本被合并到单个内联脚本中。
这一切都运行得很好。
我唯一缺少的是一种将多个$(文档).ready jQuery函数组合成一个函数的方法。
虽然它有多个函数可以很好地工作,但为了美观和可靠性,如果有一个$(文档).ready函数就更好了。
举个例子,我希望能够解析这段代码:
<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>如下所示:
<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在结构/格式上不够一致,这是不可靠的。
发布于 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()做一些更复杂的事情。无论出于何种原因,如果在')'这样的字符串中存储了一个左括号或右括号,则此方法将会出现问题。但是如果你不认为这会是一个问题,那么这应该足够好了。
https://stackoverflow.com/questions/46469772
复制相似问题