1

我有以下对象数组

var ppl = [
    {
        name: "John", 
        content: "<p>description</p>"
    }, 
    {
        name: "Mike",
        content: "<p>Desc</p>"
    }, 
    {
        name: "Steve",
        content: "html"
    }, 
    {
        name: "Michael",
        content: "<p>description</p>"
    }
];

我正在做的是在数组上方显示。然后当用户点击名称时返回他的内容。喜欢以下

    $('a.ppl').on('click', function (e) {
        e.preventDefault();

        var text = $(this).text();

        var content = _.find(ppl, function (desc) { if (desc.name === text) return desc.content; });
        console.log(content);
    });

上面的代码所做的是找到被点击的人的内容,但是它返回那个人的整个对象,例如当John被点击时,他的整个对象{ name: "John", content: "<p>description</p>" }_.find()函数返回。我只需要内容。我怎样才能只返回内容?

4

4 回答 4

1

如果我是你,我会简单地做一个循环:

var length = ppl.length;
var findcat = function(){
   for (var a = 0; a < length; a++) { if(ppl[a].name==text){return ppl[a].content} };
}
var content = findcat();

而不是使用 underscore.js 。

或者如果你真的想使用 underscore.js,把它改成这样:

 var content = _.find(ppl, function (desc) { if (desc.name === text) return desc; });
 content = content.content;

它会起作用。

更新(关于 json 中的 HTML 字符串):

可以将它们存储在 json 中,因为这些 HTML 字符串将被视为普通字符串数据(只是不要忘记转义字符,如引号和正斜杠)。当从这些字符串创建真正的 HTML 元素时(使用 jquery.html(string)函数append(string)如差异将非常微妙。所以就性能而言,将它们放在 json 中总是可以的。但就安全性而言,当您的数据中有 HTML 标记时,您应该小心,因为您使XSS更容易实现。(这是维基百科的文章提供有关 XSS 的更多详细信息,也称为跨站点脚本。)

于 2013-09-28T07:53:42.727 回答
0

_.find遍历列表中的每个值,返回第一个通过真值测试的值,当您返回时,desc.content它被评估为 true,因此desc对象返回。所以你不能返回里面找到。但你可以访问contentas desc.content。这是jsfiddle代码

 $('a.ppl').on('click', function (e) {
    e.preventDefault();

    var text = $(this).text();
    var desc = _.find(ppl, function (desc) { 
        return desc.name === text; 
    });
    console.log(desc.content);
});
于 2013-09-28T07:56:22.823 回答
0

我认为您在这里不需要数组。一种更简单、更有效的方法是将名称用作属性。

var ppl = {"John": "<p>description</p>", "Mike": "<p>Desc</p>" };

 $('a.ppl').on('click', function (e) {
        e.preventDefault();

        var text = $(this).text();

        console.log(ppl[text]);
 });
于 2013-09-28T07:56:23.260 回答
0

这是 find 运算符的预期行为,它返回整个找到的项目!,为什么不使用 content.content

于 2013-09-28T08:03:31.327 回答