有没有相当于php echo的js,包括所有的优点?

Is there a js equivalent to php echo, including all merits?

提问人:Daniel F 提问时间:3/24/2023 更新时间:3/24/2023 访问量:97

问:

我一直在使用php来更改我网站上的html和css。这和我想象的一样简单。只需在实际插入边框颜色标题值的任何地方回显变量,即可完成所有设置。 我希望能够在 JS 上做到这一点。

也就是说,我想定义 js vars 以等于 php 变量,然后将 js vars 与我的 php 方法相同。意思是,在html / css表达式中,没有改变它。这样,我就可以根据用户操作随时随地更改显示的值。

我不想使用js命令,例如document.getElementId('whatever').style.color...我有成百上千的php变量,而不仅仅是几个,这将是一场噩梦。我也不想将 css 变量设置为等于 php 变量的 js 变量,或者这种相当苛刻的解决方法(同样,手头有大量更改,我不想让它变得更糟)。我想使用与 php 相同的方法(当然,如果它在 js 上不存在也没关系,但这就是问题所在)。

PS 如果有一种方法可以随时随地更改 php 变量,那也可以工作。我只是认为将它们设置为 js vars 会更容易,它们基本上应该在旅途中更改。

JavaScript PHP

评论

8赞 Teemu 3/24/2023
听起来你手头有糟糕的设计解决方案,从一开始就造成了一场噩梦。浏览器中没有原生引擎,但您可以搜索适合您目的的客户端模板引擎。echo
1赞 AD7six 3/24/2023
目前还不清楚你为什么要直接将你在 php 中做的事情移植到 js - 例如,您是否正在将应用程序从 php 移植到 node.js 或其他东西?您尝试这样做的“原因”会有所帮助。请编辑要解决的问题。
1赞 ADyson 3/24/2023
同意,这听起来像是一件非常奇怪的事情,想要/需要做......最好了解动机(和任何限制),以便尝试提出一些有意义/现实的方法。当你说你的意思是“不刷新页面”吗?最终,听起来您可能正在考虑架构的重大变化,而不是简单的转换。客户端和服务器端代码的运行方式根本不同,因此不太可能有简单的直接转换来满足所有场景,除非你的PHP代码非常琐碎。on the go

答:

3赞 T.J. Crowder 3/24/2023 #1

前言:使用客户端 JavaScript 生成整个页面内容通常不是最佳做法。


浏览器环境中最接近的直接等价物是 document.write,出于以下几个原因,您可能不想使用它:

  1. 这真的很啰嗦,因为你必须把所有东西都包在.<script>...</script>

  2. 定义它的 HTML 规范反对使用它

  3. 它并非在所有地方都有效。

    • 您不能在 .(您可以通过改为分配来解决此问题。<title>...</title>document.title

    • 您不能在标签内使用它( 和 之间)。这不起作用,例如:<>

      <!-- Doesn't work: -->
      <div class="<script>document.write('x')</script>">___</div>
      <!-- Doesn't work: -->
      <div <script>document.write("class=x")</script>>___</div>
      

除此之外,它有效。而不是:

// PHP
<div><?=variableGoesHere?></div>

这将是

<!-- JavaScript in HTML -->
<div><script>document.write(variableGoesHere)</script></div>

你可以通过定义你自己的参数(并借此机会支持多个参数)来缩短它:echo

function echo(...msgs) {
    document.write(msgs.join(""));
}

那么它将是:

<!-- JavaScript in HTML -->
<div><script>echo(variableGoesHere)</script></div>

或者,您可以完全用模板文字编写页面,然后在单个赋值中将其输出到(甚至,但如果有可能的话,我会正常编写文档),如下所示:document.body.innerHTMLdocument.documentElement.innerHTMLhead

<!-- Here you'd have the usual

<html>
<head>
(head content)
</head>
<body>

...but Stack Snippets provide that -->
<script>
// Your variables
const x = "ecks";
const y = "why";
const z = "zee";

// Writing the HTML in a template literal:
document.write(`
    <div>The value of x is ${x}</div>
    <div>The value of y is ${y}</div>
    <div>The value of z is ${z}</div>
`);
</script>

<!-- </body></html> -->

与脚本标签不同,您可以在任何地方进行替换。document.write

使用正确的 IDE 加载项,您甚至可以在模板文本中获得 HTML 语法突出显示。

或者,您可以搜索客户端渲染库,但这些是立即浮现在脑海中的内置选项。

评论

0赞 Daniel F 3/24/2023
我理解为什么它听起来可能非常丑陋的编码,但我已经按照我描述的方式使用 php 变量,并且我正在寻找从 php 到 js 的最小努力转换,这可能是你提到的问题。我现在不打算改变我的整个架构。因此,让我们暂时关注一下 blech。它实际上不起作用 - 标题中的脚本似乎不是有效的html(它实际上只是设置字符串“<script>document....”以此类推作为标题......有什么方法可以让它仍然工作吗?谢谢:)
0赞 Daniel F 3/24/2023
我可能需要澄清一下——我在<标题中试过了>哈哈。使用 php,而不是 js。显然,在 HTML 中每次使用字符串可能都是一样的。
0赞 T.J. Crowder 3/24/2023
@DanielF - 是的。这很有趣(它敲响了一个微弱的钟声),你不能在一个标签内(在和之间)做到这一点,但我们就是这样。关于最少的转换,我完全不确定模板文字不是您最简单的选择。对于每个页面,变为 .它主要是在开头和结尾插入。:-)title<><body>body content here</body><body><script>document.write(`body content here`);</script></body><script>document.write(` ​`);</script>