【问题标题】:jQuery append on .eachjQuery 附加到 .each
【发布时间】:2012-05-14 01:42:30
【问题描述】:
var positions = [ "00", "01", "02", "03", "04", "05" ];
jQuery.each( positions, function(players) {
var playerNotesContent = document.createElement('div');
playerNotesContent.setAttribute('id', 'player_stats_block'+this);
$("#player_stats_block" + this).append (columns); 
})

我想知道,为什么.append 命令不能与+this 一起使用,但是在创建 div 时它可以工作。我究竟做错了什么?抱歉我的英语不好,提前非常感谢!

更新

var positions = [ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18" ];

jQuery.each( positions, function(players, value) {

var player_id = $("#ctl" + value).attr("href").match(RegExp('players/([^/]+)/details.php$'))[1];
var playerlink = document.getElementById("ctl" + value);

GM_xmlhttpRequest({
method: 'GET',
url: 'http://www.test.com/players/item/' + player_id,
onload: function(responseDetails) 
{
            var page = jQuery(responseDetails.responseText);
            var columns = jQuery('div.columns',page);
            var playerNotesContent = document.createElement('div');
            playerNotesContent.setAttribute('id', 'player_stats_block'+value);
            playerlink.parentNode.insertBefore( playerNotesContent, playerlink.nextSibling  );
            $('#player_stats_block00').append (columns); 
}
});
});

像这样,所有值都被附加到#player_stats_block00 中!我尝试了您的几个答案,但我无法将它们附加到正确的#player_stats_blockXX。再次抱歉我的英语不好,谢谢大家的帮助!

【问题讨论】:

  • 你想用 this 做什么?如果这是数组的索引或值,则应使用回调函数提供的值: $.each(positions, function(index,value) {
  • @ThomasHaratyk: this 将是String,在第一种情况下是"00",在第二种情况下是"01",依此类推:api.jquery.com/jQuery.each

标签: jquery append each


【解决方案1】:

我会改变的东西很少。回调将值作为第二个参数提供,而不是第一个。您对append 的调用后跟一个空格 - 中断。我不确定您是否要将columns 添加到您的新div 中,或者相反。

var positions = [ "00", "01", "02", "03", "04", "05" ];

$.each( positions, function( index, value ) {
  $( "<div>", { id : 'player_stats_block' + value } )
    .appendTo( "#columns" );
});

如果columns 是对开始的dom 元素的合法引用,您可以将其放回到对$.appendTo() 的调用中,位于主行的末尾。目前尚不清楚这个变量在您的原始帖子中代表什么。

【讨论】:

  • @T.J.Crowder 该值已被处理。见jsbin.com/uqihaq/edit#javascript,html 看来,如果你写出完整的标签,id 的值就不会被结转。就像我在上面所做的那样,只包括开始标签是有效的。
  • @T.J.Crowder 我现在正在和 Scott Gonzalez 交谈,他告诉我 HTML 字符串不能有任何属性或内容。它应该是 only 元素。
  • @T.J.Crowder 是的,我立即测试了html,发现它也没有被转移。 Scott 建议重写以查看 &lt;(\w+) 并从 HTML 字符串推断 nodeName 的可能性。那会很酷。到目前为止,它基本上是document.createElement(selector)
  • @T.J.Crowder 当我把票寄给他时,他已经在看票了。
【解决方案2】:

您的代码正在创建一个 div 并设置其 id,然后尝试通过该 ID 查找 div。查找将失败,因为尚未将 div 添加到 DOM 的任何位置。

var positions = [ "00", "01", "02", "03", "04", "05" ];

jQuery.each( positions, function(players) {
    // Here you're creating the div
    var playerNotesContent = document.createElement('div');

    // ...and setting its `id` (btw, you can just do playerNotesContent.id = value;)
    playerNotesContent.setAttribute('id', 'player_stats_block'+this);

    // ...and here trying to look it up
    $("#player_stats_block" + this).append (columns); 
});

如果您尝试将 div 附加到 columns,您可能想要这个而不是最后一行:

columns.append(playerNotesContent);

(请注意,append 会将内容添加到您调用它的容器中。)

假设columns 是一个jQuery 对象。否则:

$(playerNotesContent).appendTo(columns);

$(columns).append(playerNotesContent);

(请注意,appendTo 会将您调用它的内容添加到您提供的参数中;它与 append 正好相反。)

还值得注意的是,正在创建的 div 没有内容,因此除非您对它们进行样式设置,否则它们不会有任何尺寸,并且在页面上很难找到。 :-)

这是一个假设 columns 是一个 jQuery 对象的示例,并为 div 提供一些内容以便您可以看到它们:Live copy | source

HTML:

<div id="columns"></div>

JavaScript:

jQuery(function($) {

  var columns = $("#columns");
  var positions = [ "00", "01", "02", "03", "04", "05" ];

  jQuery.each( positions, function(players) {
    var playerNotesContent = document.createElement('div');
    playerNotesContent.innerHTML = "Player Stats";
    playerNotesContent.id = 'player_stats_block'+this;
    columns.append(playerNotesContent);
  });  

});

【讨论】:

  • 我看到 player_stats_block00、player_stats_block01、player_stats_block02... 已成功创建,但附加不起作用!
  • @Alex columns 是什么?它是在哪里定义的?
  • $('#player_stats_block').append (columns); 工作正常,var playerNotesContent = document.createElement('div'); playerNotesContent.setAttribute('id', 'player_stats_block');playerNotesContent.append(columns); 不行。
  • @Alex:我添加了一个活生生的例子。请注意,您的 div 元素是空的,因此除非您对它们进行样式设置,否则它们将很难在页面上找到(因为它们的高度为零)。
  • var page = jQuery(responseDetails.responseText); var columns = jQuery('div.columns',page); 这是columns
【解决方案3】:
var positions = [ "00", "01", "02", "03", "04", "05" ];

jQuery.each( positions, function(index, value) {
   $('<div id="player_stats_block'+ value +'"></div>').append(columns);
});

【讨论】:

    【解决方案4】:

    用 $(this) 替换这个 -->

    var positions = [ "00", "01", "02", "03", "04", "05" ];
    jQuery.each( positions, function(players) {
    var playerNotesContent = document.createElement('div');
    playerNotesContent.setAttribute('id', 'player_stats_block'+$(this));
    $("#player_stats_block" + $(this)).append (columns); 
    })
    

    【讨论】:

    • 在这种情况下,this 将是一个String 对象。 api.jquery.com/jQuery.each 对它们调用 $() 毫无意义(事实上,会导致错误,因为 $("00") - 第一次迭代的值 - 是无效的选择器)。
    猜你喜欢
    • 2013-09-28
    • 2017-10-23
    • 1970-01-01
    • 2011-06-29
    • 2019-12-21
    • 1970-01-01
    • 2019-09-24
    • 2013-12-25
    • 2012-05-24
    相关资源
    最近更新 更多