【问题标题】:how to shorten a repetitive javascript php code如何缩短重复的 javascript php 代码
【发布时间】:2017-12-04 04:07:49
【问题描述】:

我是 JavaScript 新手。请帮助解决以下问题。我有一个重复的代码块,大约有 40 个“案例”几乎相同的代码 - 它采用 wordpress do_shortcode 的返回值并保存到 javascript 变量(这部分工作正常)。

我想通过某种实现相同功能的代码循环来缩短它。我尽量不使用 COOKIE 将值传递给 PHP。 请参阅示例 1st 几行:

switch (id) {
case 1: oh = `<?php echo do_shortcode("[block id=\"oh1\"]"); ?>`;break;
case 2: oh = `<?php echo do_shortcode("[block id=\"oh2\"]"); ?>`;break;
case 3: oh = `<?php echo do_shortcode("[block id=\"oh3\"]"); ?>`;break;
case 4: oh = `<?php echo do_shortcode("[block id=\"oh4\"]"); ?>`;break;`
...
}

jQuery('#id').html(oh);

我必须像上面那样指定 40 行,但还没有找到其他方法。请分享您宝贵的想法。谢谢

【问题讨论】:

  • switch 在做什么?只是在号码的case 中插入一个数字?你可以直接插入变量的值而不需要任何switch 语句(如果里面没有更多的话)。
  • 请添加更多代码。其实还不清楚do_shortcode在做什么。
  • do_shortcode 是一个 wordpress 函数。在这种情况下,它只需要 HTML
    块的内容并返回该内容。
  • 您应该将解决方案作为答案发布,而不是作为问题的更新。这是为了帮助未来的访客并避免混淆。如果解决方案已经发布,请考虑接受它。谢谢。

标签: javascript php loops repeat shortcode


【解决方案1】:

这个怎么样(我假设你的开关是 Javascript 的)。

oh = '<?php echo do_shortcode("[block id=\"oh_num\"]"); ?>'.replace('_num', yourVariableInSwitch) ;break;`

在这种情况下,您甚至不需要 switch 语句。

如果你必须做 40 次:

for (var i = 0; i < 40; i++) {
    console.log('<?php echo do_shortcode("[block id=\"oh_num\"]"); ?>'.replace('_num', i);
}

使用 PHP 为 javascript 呈现 switch case 语句

switch (yourVariable) {
<?php
for ($i = 1; $i < 41; $i++) {
    print 'case ' . $i . ': oh = ' . do_shortcode("[block id=oh'" . $i . "']") . '; break;';
}
?>
}

【讨论】:

  • 我尝试了第一个建议。错误是:未找到块“oh1”。即使有一个名为“oh1”的块。我在这里做错了什么?
  • 由于您没有将该块指定为实际依赖,因此我们必须完全使用 PHP 来完成。我已经更新了一个答案。 @金
【解决方案2】:

使用 ES6 string interpolation

const myNumber = 2;
const oh = `<?php echo do_shortcode("[block id=\"oh${myNumber}\"]"); ?>`;
console.log(oh);

【讨论】:

  • 好建议。但是有一个错误:找不到块“oh1516”。即使“myNumber”(上图)的值为 1。奇怪!!
【解决方案3】:

全部使用 PHP:

<?php
for($i=1,$l=41; $i<$l; $i++){
  echo "case $i: oh = ".do_shortcode("[block id='oh$i']").' break;'
}
?>

【讨论】:

  • for($i=1,$l=41; $i&lt;$l; $i++)for($i=1; $i &lt;= 41; $i++)。什么是清洁剂?
  • 你的意思是$i &lt;= 40,但肯定是后者更清楚。
  • 嗯,第二个和第一个不一样。我只是将数字存储到变量中。也许 OP 想用 count($someArray) 替换 41 或其他东西。当然,在这种情况下我会使用foreach 循环。
  • 但 $i 值来自 javascript。我可以通过 COOKIE 将它的值传递给 PHP。但是有些用户可能没有启用cookie!
  • 发送 AJAX 到服务器并在那里运行你的循环。
猜你喜欢
相关资源
最近更新 更多
热门标签