Javascript 将字符串转换为变量java
我有我喜欢的绳子Javascript 将字符串转换为变量java,javascript,string,dhtmlx,Javascript,String,Dhtmlx,我有我喜欢的绳子 5: "White", 6: "Yellow", 7: "Pink" 我需要像这样的字符串视图 s={5: "White", 6: "Yellow", 7: "Pink"}; 用于将其附加到表单上选择 for (var a in myOpts) { var t = document.createElement("OPTION"); t.value = a; t.appendChild(document.creat
5: "White", 6: "Yellow", 7: "Pink"
我需要像这样的字符串视图
s={5: "White", 6: "Yellow", 7: "Pink"};
用于将其附加到表单上选择
for (var a in myOpts)
{
var t = document.createElement("OPTION");
t.value = a;
t.appendChild(document.createTextNode(myOpts[a]));
selectObj.appendChild(t);
}
如果您对字符串进行
json\u解码
s,您将得到一个具有3个属性的普通对象。然后,您可以在构造中使用“for.”循环这些属性:
var myOpts, s='{5: "White", 6: "Yellow", 7: "Pink"}';
eval('myOpts='+s); // or better, a json parser
for(var a in myOpts) {
if(myOpts.hasOwnProperty(a)) {
// your dom code here
}
}
不过,你的问题有点不清楚——我会试着猜你在说什么,涵盖所有情况,并提供一点附加值;)
我假设您在JSP页面中有一个服务器端字符串,谁的值是
5: "White", 6: "Yellow", 7: "Pink"
它看起来像什么
<%
String data = "5: \"White\", 6: \"Yellow\", 7: \"Pink\"";
%>
此选择的限制是,来自服务器代码的内容(在
中)和来自标记的内容(在
之外)必须作为有效的JavaScript对象文本一起工作。
有很多事情会破坏这个对象文字的合法性——比如字符串断开、逗号缺失、冒号缺失等等。虽然这是推荐的方法-你必须知道你在做什么,我建议你把这些知识放在一边,你的例子是一个好的开始
在您的示例中,这将呈现为有效的JavaScript对象文本,而问题并不存在
<script>
var sObjData = {5: "White", 6: "Yellow", 7: "Pink"};
</script>
这一部分将确保从服务器向客户机获取所有数据,并且客户机可以访问这些数据。从这里开始——这是一个关于在客户机上传递数据和解析数据的协议的问题
然而,这并不总是被推荐的:如果你所交付的所有内容都可以表述为一个对象文字,那就更好了,因为浏览器在一个编译好的代码中为你处理解析,并为脚本代码提供一个现成的对象
除非您想解析自己的字符串协议,否则它似乎会得到与下面相同的结果,那么为什么还要麻烦呢?最好是safeJs
你的价值观
<script>
var sObjData = '<%= safeJs(data) %>';
var oObjData = eval("{" + oObjData + "}");
<script>
选择中的建筑选项
createElement
的DHTML技巧很有效,但是我很少使用它,因为它很麻烦,而且性能很低。
但是,如果您能够正确地编写对象文字,它应该可以工作
注入HTML
与其创建一个select并尝试填充它,不如将它完全注入到DOM中更快、更可靠
为此,我使用以下实用程序:
function getStringBuffer(){
var bfr = [];
bfr.add = function() {
for(var i=0;i<arguments.length;i++) {
this[this.length] = arguments[i];
}
}
bfr.toString = function() { return this.join("") }
return bfr;
}
第二种方法-使用innerHTML
您也可以这样做,而不是document.write-使用容器标记来标记select的位置,并在DOM完成加载后将其注入其中
它与第一种方法相同,但有一个区别:而是document.write(HTML)代码>-
将容器放在您希望选择的位置,比如说
,然后使用
document.getElementById(“oSelectPlace”).innerHTML=HMTL代码>你确定你指的是Java而不是JavaScript吗?
<script>
var sObjData = '<%= safeJs(data) %>';
var oObjData = eval("{" + oObjData + "}");
<script>
<textarea style="display:none" id="txtData"><%=data.replace("</","</")%></textarea>
<script>
var s = document.getElementById("txtData");
</script>
function getStringBuffer(){
var bfr = [];
bfr.add = function() {
for(var i=0;i<arguments.length;i++) {
this[this.length] = arguments[i];
}
}
bfr.toString = function() { return this.join("") }
return bfr;
}
<script>
(function(){
var HTML = getStringBuffer();
var k;
HTML.add("<select id='selectObj'>");
for (k in myOpts) {
HTML.add("<option value='", k, "'>", myOpts[k],"</option>");
}
HTML[HTML.length] = "</select>";
document.write(HTML); //note the overriden toString method that will be called here
})();
</script>