[英]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.