结合几个文档准备块


Combining several doc ready blocks

假设我们有以下来自两个文件的javascript片段:如何用PHP构建all.js ?

a.js

var a = 20;
function foo() {
  console.warn('bar');
}
foo();
$(document).ready(function() {
  $(".someid").on("click", ".class", function() {
    do_stuff();
  });
});

研究

var x = ['room', 'admin', 2];
$(document).ready(function() {
  $.post("url/", { n: 80}, function(j) {
    console.log(j);
  }, "json");
});

all.js

var a = 20;
function foo() {
  console.warn('bar');
}
foo();
var x = ['room', 'admin', 2];
$(document).ready(function() {
  $(".someid").on("click", ".class", function() {
    do_stuff();
  });
  $.post("url/", { n: 80}, function(j) {
    console.log(j);
  }, "json");
});

这是我最后做的。它假定遵循了一些约定,否则就会被打破。但对我目前的需要来说已经足够了。

$js_sources = array('
  var a = 20;
  function foo() {
    console.warn("bar");
  }
  foo();
  $(document).ready(function() {
    $(".someid").on("click", ".class", function() {
      do_stuff();
    });
  });','
  var x = ["room", "admin", 2];
    $(document).ready(function() {
      $.post("url/", { n: 80}, function(j) {
        console.log(j);
      }, "json");
    });
');   
$outjs = array();
$outready = array();
foreach($js_sources as $js) {
  $js = explode('$(document).ready(function() {', $js);
  $outjs[] = $js[0];
  $js = $js[1];
  $mark = strrpos($js , '});');
  $outjs[] = substr($js, $mark + 3);
  $outready[] = substr($js, 0, $mark);
}
$out = implode(PHP_EOL, $outjs) . 
  '$(document).ready(function() {' . implode(PHP_EOL, $outready) . '});';