2013-10-07 113 views
3

我试图创建一个可重用的JavaScript/jQuery函数,其中只有HTML将是可编辑的。基本上,jQuery脚本将在表单select元素上查找某个类,并且它将填充选择框。它将使用一个xml文档,该文档将被输入到JavaScript变量中。Javascript:从HTML获取变量名称

<form> 
    <select name="topliclist" class="mhs-events" data-event-xml="/xml/events.xml" data-event-text="$fullDate, at ,$startTime, - ,$location"></select> 
</form> 

在这个例子, 'fullDate', '开始时间' 和 '位置' 是在JavaScript变量:

//js 
var fullDate = 'Monday, October 7'; 
var startTime = '6:30 PM'; 
var location = 'Office Building 1'; 

(不用担心喂养从XML变量,我可以做那)

的“字符串”变量将等于数据事件文本:

//js 
var string = '$fullDate, at ,$startTime, - ,$location'; 
$.each(string.split(","), function(index, item) { 

      //remove $, only put this to specify that it is a variable 
      if(item.indexOf('$') == 0) { 
       item = $(item.substring(1)); 
       item = item.toString(); 
      } 

      newString += item 
     }); 

     $(this).append('<option>' + newString + '</option>'); 

而不是“周一,章鱼下午6点30分 - 办公楼1',它在[对象对象] - [对象对象]中填充[对象对象];

从data-event-text属性中获取变量名并实际使用它获取JavaScript中的变量值的最佳方法是什么?

+0

做一个console.log并检查你在'newString'中获得了什么 – Satpal

+0

我在控制台中得到了同样的结果。 – nitsuj

+0

在Chrome中尝试console.dir()...您可以展开对象以查看其属性,这将告诉您要使用哪个属性。 – adam

回答

1

变化

item = $(item.substring(1)); // this converts your string to object 
item = item.toString(); 

item = item.substring(1); 
item = eval(item).toString(); 

而且你不需要每一个项目加入到newString将返回所有项目作为一个选项。

尝试:

$.each(string.split(","), function(index, item) { 
      //remove $, only put this to specify that it is a variable 
      if(item.indexOf('$') == 0) { 
       item = item.substring(1); 
       item = eval(item).toString(); 
      } 
      newString += item; 
}); 
$('.mhs-events').append('<option>' + newString + '</option>'); 

DEMO FIDDLE

+0

我将它转换为不带,它将返回'fullDate'而不是fullDate变量的值。思考? – nitsuj

+0

此外,我不想为字符串中的每个单词创建一个新选项。 – nitsuj

+0

@nitsuj更新代码。 – Unknown

0

你可以写一个方法如下

function readString(el1, el2, el3, x) { 

     var newStr = ''; 
     var temp = x.split(' '); 
     for (var i = 0; i < temp.length; i++) { 
      var str = temp[i]; 
      if (str.indexOf('$') == 0) { 
       newStr += eval(str.substring(1, str.length)); 
      } else { 
       newStr += str; 
      } 

      newStr += ' '; 
     } 

     return newStr; 
    } 

要调用

readString("I", "am" ,"saying", "$el1 $el2 $el3 hello!!!")