当我点击动态添加项目时,我正在尝试更改css类。我确实在doStuffWithThisItem方法中有项目,但似乎更改没有保存回到dom树中。 但我无法让它发挥作用。你能发现我做错了吗?
<style type="text/css">
.selectedItem {
background-color: red;
}
</style>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function () {
function doStuffWithThisItem(item) {
alert(item.id);
jQuery(item.id).addClass('selectedItem');
}
function parseNodes(nodes, level) {
var ol = document.createElement("ul");
for (var i = 0; i < nodes.length; i++) {
ol.appendChild(parseChildNode(nodes[i], level));
}
return ol;
}
function parseChildNode(child, level) {
var li = document.createElement('li');
jQuery(li).html(child.title)
.attr("id", child.id)
.click(function () {
if (level == 1) {
doStuffWithThisItem(this);
}
});
return li;
}
window.jsonData = [{
"title": "Item 1",
"id": "item1",
"description": "Item 1 description"
},
{
"title": "Item 2",
"id": "item2",
"description": "item 2 description"
}];
jQuery("#someDiv").html(parseNodes(jsonData, 1));
});
</script>
<div id="someDiv"></div>
答案 0 :(得分:2)
请更改:
jQuery(item.id).addClass('selectedItem');
要:
jQuery("#"+item.id).addClass('selectedItem');
选择器中有错误
答案 1 :(得分:1)
您已经在doStuffWithThisItem
中使用了html元素,因此您无需使用id
来获取该元素,但是您没有正确使用它。
试试这个:
function doStuffWithThisItem(item) {
alert(item.id);
jQuery(item).addClass('selectedItem');
}
答案 2 :(得分:0)
你试过.on和.live处理程序:
jQuery(li).html(child.title)
.attr("id", child.id)
.on('click',function () {
if (level == 1) {
doStuffWithThisItem(this);
}
});
或
jQuery(li).html(child.title)
.attr("id", child.id)
.live('click',function () {
if (level == 1) {
doStuffWithThisItem(this);
}
});
答案 3 :(得分:0)
我认为它与动态添加的项目有关。我之前遇到过这种情况,并且必须使用.on()
方法将事件附加到动态添加的项目中。
此外,我认为您的选择应该只是项,而不是item.id
。
答案 4 :(得分:0)
jQuery(item.id).addClass('selectedItem');
原来是
jQuery('#' + item.id).addClass('selectedItem'); // OR jQuery(item)
缺少 #ID 选择器..
<强> Check Fiddle 强>