【问题标题】:Getting data that is stored in several HTML elements获取存储在多个 HTML 元素中的数据
【发布时间】:2014-11-09 13:39:35
【问题描述】:

假设我在页面body 的开头有 10 个跨度,其结构如下:

(只是为了更容易使用 Jquery,不知道如何使用 JSON 传递数组)

<span class="nike" data-img="logos/nike_logo.png" data-id="10"></span>

编辑!:跨度可以更改为其他任何内容,输入等,并且可以更改结构,只需要到达 img url 和 id

现在,有一个 Javascript 函数可以处理一组单词,并将它们打印出来(搜索/建议/提前输入之类的东西)。函数示例:

function suggestionTemplate(context) {

            switch(displayFn(context)) {

                case "nike":

                    return "<p style='background-image:url(logos/nike_logo.png);'>" 
                            + displayFn(context) + "</p>";
                    break;

                case "spalding":

                    return "<p style='background-image:url(logos/spalding_logo.png);'>" 
                    + displayFn(context) + "</p>";

                    break;

                default:
                    return "<p>" + displayFn(context) + "</p>";
            }

}

所以问题是,我怎样才能让这个函数获取所有span 类名(或者它可以是数据名等),然后当displayFn(context) == 跨度的类名之一返回&lt;p&gt;具有该跨度 data-img 的元素?

如果太难理解,请告诉我。我只是在做一个实验,想知道这是否可行。

【问题讨论】:

标签: javascript php jquery html typeahead.js


【解决方案1】:

如果你像这样改变结构,那就容易多了:

<span class="js-app-data" data-name="nike" data-img="logos/nike_logo.png" data-id="10"></span>

然后你可以像这样得到你定义的所有数据:

data = Array.prototype.reduce.call(document.querySelectorAll('.js-app-data'), function(mem, e){
    mem[e.dataset.name] = {
        img: e.dataset.img,
        id: e.dataset.id
    }
    return mem
}, {})

这将使data 成为一个具有如下结构的对象:

{nike: {img:'logos/nike_logo.png', id:'10'}, ...}

由此,从 javascript 中获取数据应该很容易。

function suggestionTemplate(context) {
    if (context.name in data) {
        return ("<p style='background-image:url("+ data[context.name].img +");'>" 
                + context.name + "</p>");
    }
}

【讨论】:

  • 感谢您的回答。您能告诉我如何使用您提供的功能吗?我提到的函数suggestionTemplate 每次输入一个字母都会被调用,所以我要把你的函数放在那个里面吗?编辑:“,”修复了该错误,但是现在“数据”未定义。
  • @GytisK 我错过了一个逗号,我添加了一个函数,该函数返回具有正确背景的&lt;p&gt;
  • 好吧,我现在有了值 :) 但是我不认为 (context in data) 会起作用,因为每次点击时的 console.log(context) 都有这个:awesomescreenshot.com/0173tbided
  • @GytisK 哦,我原以为context 将是一个简单的字符串。
  • 好吧,我怎样才能达到 data 的值来与 context 进行比较?数据看起来像这样awesomescreenshot.com/08e3tbj2a1。它只需要找到相同的名称,例如 efx = efx,而不是 efx = efx blabla
猜你喜欢
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
相关资源
最近更新 更多