【问题标题】:Can I replace placeholder text in a rendered HTML page dynamically?我可以动态替换呈现的 HTML 页面中的占位符文本吗?
【发布时间】:2013-04-30 19:45:24
【问题描述】:

我希望我能想出一个更好的方式来表达我的问题,但基本上这就是我想要做的:在一个 HTML 文件中,我想用特定的字符串多次填充正文。例如:

<div>
    This is some content. XXX
</div>
<div>
    This is some more content. XXX
</div>
<div>
    This is even more content. XXX
</div>

然后,我想要一些脚本通过页面,并用递增的数字替换字符串的每个实例(在本例中为 XXX,但它可以是任何值),所以,例如:

<div>
    This is some content. 001
</div>
<div>
    This is some more content. 002
</div>
<div>
    This is even more content. 003
</div>

这当然是一个简单的示例,您可能认为这很愚蠢,只需输入数字即可。但是显然这比我打算做的要简单,而且现在我正在构建的所有内容的顺序还没有决定,所以事情可以在页面上的位置上下移动,但是我希望所有数字按照它们在页面上出现的顺序排列。

所以,最后的想法:我非常确定有一种比我想象的更好的方法来做到这一点,方法明智(即,制作一个 XML 表或其他东西)。我绝对愿意接受任何关于如何做到这一点的建议,但我有点白痴,所以如果你的答案是“pff 这在 Ruby 中非常容易,只需使用 Ruby”,那并不会真正让我到达我需要的地方.此外,如果这个问题已经得到解答,那么很难想到如何措辞来搜索以前的答案,所以如果我在搜索时没有找到预先存在的答案,我提前道歉。

【问题讨论】:

  • 我假设您可以访问服务器上的文件? (您不会将其输入到某些 CMS 类型的界面中,是吗?)
  • 这是正确的,也是一个公平的问题:)

标签: html variables dynamic replace


【解决方案1】:

您可以使用 CSS 计数器轻松做到这一点,sample here

CSS

ul {
    counter-reset:list;
}
li:after {
    counter-increment:list;
    content: " (" counter(list) ")";
}

如需更多高级示例,请访问MDN documentation page

【讨论】:

  • 后续问题:有没有办法让计数器显示为四位数字,如 0001 或 0304?
  • 不,不完全符合您的要求,但通过将 decimal-leading-zero 添加到 counter 定义中,您可以让它在小于 10 的数字前添加前导零,see updated Fiddle
  • @Michael Davis - 我已经更新了我的答案以处理任意数量的前导零。
  • 最后一分钟添加:what you want is actually being designed by the W3C。然而,它目前仍是Editor's Draft,还没有浏览器支持它。
  • 这实际上是一个很棒的解决方案,但 PHP 解决方案只是更接近我想要达到的目标。但是非常感谢,这很好用,而且我还了解到 CSS 有计数器,所以这对我来说是双赢的:D
【解决方案2】:

您可以使用 PHP 来实现这一点。如果您没有使用它的经验,它确实很容易与 HTML 集成。基本上你像往常一样编写你的 html,但是你将文件命名为 .php 而不是 .html。然后你插入php脚本如下,例如:&lt;p&gt;I can count to &lt;?php nextNumber(); ?&gt;&lt;/p&gt;.

您应该在页面顶部插入更多带有计数器功能的脚本:

<?php
$i = 1;
$places = 4;
function nextNumber() {
   GLOBAL $i, $places;
   print str_pad($i++,$places,'0',STR_PAD_LEFT);
}
?>

这可能比 CSS 更好。它不依赖于浏览器。

将 $places 更改为您想要的位数(用于前导零)

【讨论】:

  • 太棒了!非常感谢:D
  • 所以,我尝试将 pad 值也设为变量,以便打印函数看起来像 print str_pad($i++,$places,$pad,STR_PAD_LEFT);;,但这也没有削减它,所以我尝试了 print str_pad($i++,4,'0',STR_PAD_LEFT); 并且得到了它。所以显然你不能使用变量作为填充长度,我猜。 @skibulk
  • 哦,我的错 - 你可以使用一个变量,我只是没有在正确的范围内。您会看到,默认情况下,函数无法访问在括号外声明的变量。这就是我们使用 GLOBAL 的原因,以便函数可以使用在函数外部声明的变量。所以在这种情况下“GLOBAL $i, $places;”应该修复它。
  • 啊啊啊。再次非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2013-12-20
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
相关资源
最近更新 更多