Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串转换为变量java_Javascript_String_Dhtmlx - Fatal编程技术网

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("</","&lt;/")%></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>