簡體   English   中英

使用PHP解析JQuery JavaScript以合並$(document).ready函數

[英]Parse JQuery JavaScript with PHP to combine $(document).ready functions

我使用基於PHP的系統從模板和一系列包含的文件生成HTML頁面。

從其中包括的所有腳本(無論是鏈接的還是內聯的)均被提取,並放置在所生成頁面的開頭或結尾。

內聯腳本被組合為一個內聯腳本。

這一切都很好。

我唯一缺少的是將多個$(document).ready jQuery函數組合為一個函數的方法。

雖然具有多個功能可以很好地工作,但從美觀和可讀性的角度來看,最好只有一個$(document).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的jParser的方向,但這並沒有得到很好的記錄,對於我的需求來說似乎有些過頭了。

我考慮過使用基於preg_match_all的東西,但是我認為JavaScript在結構/格式方面不夠一致以至於無法保證可靠性。

我曾經做過類似的事情。 有時間后,我將嘗試獲取一些偽代碼。 但要點是您閱讀了javascript文件並逐行對其進行迭代,並使用preg_match精確匹配$(document).ready(function() { 。一旦匹配該行,就開始將每行記錄到字符串,該字符串將記錄文檔就緒中的所有功能。

然后,創建一個$counter變量,該變量將計算打開和關閉括號的數量,並將其默認設置為1。 然后,當您遍歷各行時,對開括號執行一個preg_match_all (對閉括號執行另一個preg_match_all )並計算每行上每個開/閉括號的匹配數。 對於每一個開括號,增加您的$counter 1變量,並為每一個右括號遞減$counter -1變量。 然后在每一行之后,檢查當前變量計數器是否為0。一旦為0,就意味着原始的$(document).ready(function() {已關閉。一旦所有文件都被解析為all $(document).ready語句中的函數已被記錄,將它們添加到您自己的$(document).ready字符串中。

當然,這假定未壓縮javascript文件,並且$(document).ready語句在其單獨的行中開始和結束。 如果文件縮小或格式不正確,則需要使用strpos() 如果由於某種原因,您在諸如')'類的字符串中存儲了一個左括號或右括號,則此方法將有問題。 但是,如果您不認為這將成為一個問題,那么這應該足夠好了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM