我现在有一个 json 对象,如何使用元素制作 div

发布于 2024-09-18 16:59:03 字数 728 浏览 7 评论 0原文

我正在使用 getJson 将一些信息拉入页面。json

$('#request_song').autocomplete({
  serviceUrl: '<%= ajax_path("trackName") %>',
  minChars:1,
  width: 300,
  delimiter: /(,|;)\s*/,
  deferRequestBy: 0, //miliseconds
  params: { artists: 'Yes' },
onSelect: function(value, data){
    // alert('You selected: ' + value + ', ' + $('#request_artist').val()); 
        $.getJSON('/get_events', function(data) {
                    $(data).each(function(key, value) {
                        console.log(value);
                    });
                });

    },
});

将包含事件的名称以及城市和日期,

我需要在页面上创建一个 div,其中包含来自 json 的值,例如

<div id="event_data">

//table info from json 

I am using getJson to pull in some info onto the page

$('#request_song').autocomplete({
  serviceUrl: '<%= ajax_path("trackName") %>',
  minChars:1,
  width: 300,
  delimiter: /(,|;)\s*/,
  deferRequestBy: 0, //miliseconds
  params: { artists: 'Yes' },
onSelect: function(value, data){
    // alert('You selected: ' + value + ', ' + $('#request_artist').val()); 
        $.getJSON('/get_events', function(data) {
                    $(data).each(function(key, value) {
                        console.log(value);
                    });
                });

    },
});

The json will have the name of the event and the city and date

I need to make a have a div that is on the page have the values from the json like

<div id="event_data">

//table info from json 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

九局 2024-09-25 16:59:03

我猜您的回复看起来像这样...

var data = [{
  "event": "Birthday"
  "name": "John Doe",
  "city": "Sunnyvale",
  "date": "04/07/1982"
},{
  ...
}]

如果您使用 $('

')$('

; ') 要创建新元素,jQuery 将在创建元素之前使用正则表达式,如果您正在处理大型数据集,这显然会减慢您的速度。

对于性能使用:

var div = $(document.createElement('div'));

or keep it simple...

var div = document.createElement('div');

对于性能使用标准 for 循环,而不是 $.each,并缓存长度:

var container = $("#event_data");

for(var i = 0, k = data.length; i < k; i++){
  var event = $(document.createElement('div')),
      name = $(document.createElement('span')),
      city = $(document.createElement('span')),
      date = $(document.createElement('span'));

  // add id to event wrapper, if undefined generate random ID to avoid conflicts
  event.attr('id', 'event_'+data[i].event || Math.floor(Math.random()*100));

  // add each item, if undefined then insert empty text
  name.text(data[i].name || "").appendTo(event);
  city.text(data[i].city || "").appendTo(event);
  date.text(data[i].date || "").appendTo(event);

  // append & appendTo do exactly the same thing, markup preference
  container.append(event);
}

如果使用 text(),则该值将被视为仅文本,并且不会被执行。如果您使用 html() 您将遇到 XSS 问题

希望这对您有所帮助并且正是您所寻找的。

I'm guessing your response looks something like this...

var data = [{
  "event": "Birthday"
  "name": "John Doe",
  "city": "Sunnyvale",
  "date": "04/07/1982"
},{
  ...
}]

If you use $('<div />') or $('<div></div>') to create new elements, jQuery will use regex before creating the element which for obvious reasons will slow you down if you're dealing with large data sets.

For performance use:

var div = $(document.createElement('div'));

or keep it simple...

var div = document.createElement('div');

For performance use standard for loop, not $.each, and cache the length:

var container = $("#event_data");

for(var i = 0, k = data.length; i < k; i++){
  var event = $(document.createElement('div')),
      name = $(document.createElement('span')),
      city = $(document.createElement('span')),
      date = $(document.createElement('span'));

  // add id to event wrapper, if undefined generate random ID to avoid conflicts
  event.attr('id', 'event_'+data[i].event || Math.floor(Math.random()*100));

  // add each item, if undefined then insert empty text
  name.text(data[i].name || "").appendTo(event);
  city.text(data[i].city || "").appendTo(event);
  date.text(data[i].date || "").appendTo(event);

  // append & appendTo do exactly the same thing, markup preference
  container.append(event);
}

If you use text() the value will be treated as just that, text only, and will not be executed. If you use html() you'll have XSS issues.

Hopefully this helps and is what you're looking for.

烟花易冷人易散 2024-09-25 16:59:03

将标记放入 $() 的参数中以从中创建元素。使用 {} 查找中的值来设置属性和文本内容(在 jQuery 1.4 中)。例如。例如:

$('#event_data').append(
    $('<div class="event"/>', {id: 'event_'+key}).append(
        $('<span class="event-name"/>', {text: value.name})
        $('<span class="event-city"/>', {text: value.city})
        $('<span class="event-date"/>', {text: value.date})
    )
);

不要尝试自己将其粘在一起 ($(''+value.name+'')),否则您将遇到 HTML 编码问题可能还有跨站点脚本安全漏洞。

Put markup in the argument to $() to create an element from it. Use values in a {} lookup to set attributes and text content (in jQuery 1.4). eg. something like:

$('#event_data').append(
    $('<div class="event"/>', {id: 'event_'+key}).append(
        $('<span class="event-name"/>', {text: value.name})
        $('<span class="event-city"/>', {text: value.city})
        $('<span class="event-date"/>', {text: value.date})
    )
);

Don't try to stick it together yourself ($('<span>'+value.name+'</span>')) or you'll have HTML-encoding issues and probably cross-site-scripting security holes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文