2013-10-07 110 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!!!")