0

我有一个动态填充其他 div 的 div ......

<div id="wrapper">

</div>

//javascript 
 for(//a bunch of times){
  var d = document.cloneNode('divModel');
  d.foo = {//bunch of stuff };
  document.getChildById('wrapper').appendChild(d) is applied later to fill in child divs
}

现在我想循环遍历 wrapper 的子元素并用那个 foo 做一些事情。

当我通过普通的 javascript 进行操作时

document.getElementById('wrapper').childNodes[x].foo

这如我所料

然而

$('#wrapper').each(function (i, element){
      console.log(element.foo); //foo here is undefined
})

导致一堆未定义的

所以......我猜jQuery实际上是在处理我的div的一些内部包装,而不是直接处理div。我很好奇如何(或者如果可能的话)我可以访问这个循环中的实际 div 以便访问我的自定义 foo。

编辑 根据您迄今为止的所有答案(非常感谢您的时间)我觉得我需要澄清一下,因为每个人似乎都错过了我的实际问题......我已经修改了上面的代码更加明确。

我没有语法错误(在我的实际代码中)。jQuery 正确循环通过包装器子级,它只是不返回实际的子级(div),而是返回它们自己的版本,并且这个自定义版本不包含我附加的 foo。

所以,我需要的是能够回到实际的 dom 对象,而不是它周围的 jQuery 包装器。这可能吗?

4

4 回答 4

2

您忘记了孩子(以及提到的“#”):

$('#wrapper').children().each(function (i, element)...
于 2012-10-20T07:32:29.880 回答
1

你是对的,除了选择器关闭。你需要$("#wrapper").

$("#wrapper").each(function(i,e) { console.log(e.id) });

编辑

确认可以从 DOM 元素中取回对象...

var c = document.getElementById('container');
var el = document.createElement('div');
el.id = 'new';
el.innerText='the test element';
el.test = { hello: "world" };
c.appendChild(el);
console.log('javascript: ' + document.getElementById('new').test.hello);
$("#container div").each(function(i,e) {
    if (e.test) console.log('jquery: ' + e.test.hello);
});

http://jsfiddle.net/eeYHr/3/ ​</p>

于 2012-10-20T07:31:31.647 回答
0

一些适合您的选择:

$('#wrapper').children().each(function (i, element) { ... });

$('#wrapper > *').each(function (i, element) { ... });
于 2012-10-20T07:35:57.577 回答
0

或者更明确地说,正如您所说,您只专注于子 DIV:

$('#wrapper div').each( function() {
    // do some funky stuff
    alert($(this).attr('id')); // displays element ID
});

如需进一步学习,还请参阅此 JQuery 帮助页面:

http://api.jquery.com/category/selectors/basic-css-selectors/

于 2012-10-20T07:37:32.227 回答