2013-10-07 2 views
3

Я пытаюсь создать многократно используемую функцию javascript/jQuery, где только HTML будет доступен для редактирования. В основном сценарий jQuery будет искать определенный класс в элементе выбора формы, и он заполнит поле выбора. Он будет использовать 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', 'STARTTIME' и 'место' переменные в 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>'); 

Вместо «понедельник, Octo ber 7 at 6:30 PM - Office Building 1 ', он заполняет [объект объекта] в [object Object] - [object Object];

Каков наилучший способ получить имя переменной из атрибута data-event-text и использовать его для получения значения переменной в JavaScript?

+0

Сделайте console.log и проверьте, что вы получаете в 'newString' – Satpal

+0

Я получаю то же самое в консоли. – nitsuj

+0

попробуйте console.dir() в Chrome ... вы можете развернуть объект, чтобы увидеть его свойства, это скажет вам, какое свойство использовать. – adam

ответ

1

Изменить

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

в

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

И вам не нужно добавлять каждый элемент в NewString, который возвращает все элементы, как один из вариантов.

Try:

$.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!!!") 
Смежные вопросы