2

我一直在通过 jQuery 学习如何缩短时间。我想知道这个脚本是否可以用不那么冗长的方式表达?我不喜欢所有东西都排在一条大线上。

   items.push('<li id="' + key + '">' + ' (key: ' + key + ')(value: ' + val.value +         ')(type: ' + val.type + ') (range: ' + val.range + ') (clone: ' + val.clone + ') (archive: ' + val.archive + ') (access: ' + val.access + ')</li>')
4

4 回答 4

2

假设对象将始终具有正确的键/值:

str = '';
for (var item in val) {
   str += '(' + item + ': ' + val[item] + ')';
}
$("<li>").attr('id', key).text(' (key: ' + key + ')' + str);

http://jsfiddle.net/36Nyu/

于 2012-11-28T23:25:18.243 回答
1

如果items是另一个元素,你可以做这样的事情。

var str;

for(var i in val)
    str += '('+ i +': '+ val[i] +')';

$('<li>', {
    id: key,
    text: str
}).appendTo(items);
于 2012-11-28T23:26:46.117 回答
0

您可以使用 jquery tmpl 或类似的:

var template = '(key: ' + key + ')(value: {{value}})(type: {{type}}) (range: {{range}}) (clone: {{clone}}) (archive: {{archive}}) (access: {{access}})';
$('<li />').attr('id', key).html($.tmpl(template, val));

或者,使用 string.Format 等效项:

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
        /* Allow escaping of curly brackets with {{ or }} */
        if (m === '{{') { return '{'; } else if (m === '}}') { return '}'; }
        return typeof args[n] != 'undefined' ? args[n] : '{' + n + '}';
    });
};
var text = '(key: {0})(value: {1})(type: {2}) (range: {3}) (clone: {4}) (archive: {5}) (access: {6})'.format(key, val.type, val.range, val.clone, val.archive, val.access);
于 2012-11-28T23:21:46.747 回答
0

假设您要在val对象中附加所有键/值对,则执行以下操作将非常易于维护:

var liPrefix = '<li id="' + key + '">(key: ' + key + ')',
    liSuffix = '</li>',
    liData = '';

$.each(val, function(k, v) {
    liData += ' (' + k + ': ' + v + ')';
});

items.push(liPrefix + liData + liSuffix);

看演示

于 2012-11-28T23:30:23.817 回答