我有一个动态填充其他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
}
现在我想循环遍历包装器的子项并使用那个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正确地循环包装子项,它只是不返回ACTUAL子项(div)它返回它自己的版本,并且这个自定义版本不包含我附加的foo。
所以,我需要的是能够回到实际的dom对象,而不是它周围的jQuery包装器。这可能吗?
答案 0 :(得分:2)
你忘记了孩子们(和提到的'#'):
$('#wrapper').children().each(function (i, element)...
答案 1 :(得分: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);
});
答案 2 :(得分:0)
为您提供的一些选择:
$('#wrapper').children().each(function (i, element) { ... });
$('#wrapper > *').each(function (i, element) { ... });
答案 3 :(得分: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/