假设我有一个简单的javascript辅助方法,如:
x = [z * 8 for z in range(10)]
for k,value in enumerate(x):
print '{0} x 8 = {1}'.format(k, value)
我想把它写成一个html元素,例如:
$scope.getName = function (element) {
if(element.name.length > 0)
return element.name;
else
return "I've been through a site on an element with no name"
}
我不能像我期望的那样做到这一点。相反,我已经google了,所有的答案都是创建元素,然后以编程方式稍后修改元素的文本。我想知道为什么需要这样一个更复杂的方法?我知道PHP方法可以包含上面的语法,方便且易于阅读,所以我很好奇为什么这样的语法似乎不适合javascript推荐/可用。
同样,我不一定会问如何做我想要的,而是为什么我的天真的语法假设不支持/不能支持。当然,如果有一个简单的方法来允许像上面这样的东西,我只是一个白痴因为不知道你的欢迎来叫我出于我的愚蠢,但这不是一个问题如何为<从设计/实现的角度来看,为什么。我更想知道为什么不存在这样一个简单的语法,是否有一些关于如何编译和处理javascript和HTML的怪癖,这会阻止运行方法然后用结果替换方法引用的明显方法?
答案 0 :(得分:1)
PHP和Javascript在两个不同的级别运行。
PHP在返回页面的Web服务器上运行。它可以输出任何想要的内容,并由浏览器发送和解释。从根本上说,PHP页面编译为一大堆echo
语句,其输出将一起发送到浏览器。由浏览器将该纯文本解释为HTML并在内存中构建文档结构。
Javascript正在一个网页已被解释的环境中运行,并作为Javascript可以操作的内存结构存在。虽然有很多方法可以通过解释过程发回新文本(例如document.write
),但最终会丢掉浏览器已经完成的大量工作并使其重新执行。
在任何情况下,HTML和Javascript也是两种不同的语言;在<script>
元素之外,您不能将Javascript放在HTML中间并期望它能够正常工作。 (当然,你不能用PHP真正做到这一点;你需要<?php
或<?=
标签。)
有一些Javascript模板系统像PHP一样工作,无论是在服务器端还是在客户端(例如Angular.JS)。但是这些模板由Javascript代码在与普通浏览器呈现过程分开的传递中解释。如果没有这个特殊的框架代码,您只需在HTML中使用gobbledygook。
答案 1 :(得分:0)
这是内容。 HTML解释器如何知道是执行还是显示它?必须设置内容,而不是运行。至少你必须在脚本标签中包装内容,以告诉它执行/评估它。
答案 2 :(得分:0)
最简单的原因,如果你想显示文字&#34; getName(歌曲)&#34 ;?浏览器/ html解析器如何区分&#34;函数调用&#34;和&#34;纯文本&#34;
实际上,理由更深一点:
HTML不是编程语言,它是标记语言,这是唯一的目的是格式化文本。 HTML创建于1991年左右。
超文本标记语言(HTML)是一种简单的标记语言,用于创建独立于平台的超文本文档。
创建Javascript是为了在引入HTML 4年后操纵DOM。
ECMAScript是一种面向对象的编程语言,用于在主机环境中执行计算和操作计算对象。
它的添加是向后兼容的。这意味着:HTML不知道javascript,javascript知道HTML。创建了特殊标记以将HTML和Javascript彼此分开。
答案 3 :(得分:0)
查看handlebars之类的模板引擎,以完成您正在寻找的内容。
本机不可能,因为浏览器以不同的方式解释HTML和Javascript,并且标记和逻辑分离(这是一件好事)。