3

我正在尝试创建一个可重用的 javascript / jQuery 函数,其中只有 HTML 是可编辑的。基本上,jQuery 脚本会在表单选择元素上查找某个类,然后填充选择框。它将使用一个 xml 文档,该文档将被输入到 JavaScript 变量中。

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

在此示例中,“fullDate”、“startTime”和“location”是 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>');

它不是“10 月 7 日星期一下午 6:30 - 办公楼 1”,而是在 [object Object] - [object Object] 处填充“[object Object];

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

4

2 回答 2

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

于 2013-10-07T18:32:11.957 回答
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!!!")
于 2013-10-07T18:38:38.163 回答