[英]How to access an attribute of a dynamically created element?
我正在尝试获取存储在已添加到DOM中的动态创建元素的属性中的数据。
单击按钮时,将进行AJAX调用,该调用返回对象的集合。 然后,使用Javascript / JQuery,为每个返回的对象添加新的HTML元素,并将其属性值添加到元素的属性中。 然后,我向每个动态创建的元素中添加一个点击侦听器。 单击时,我想获取这些属性中的值。
目前存在id
值,但name
的值是undefined
。
例如,给定以下HTML:
<input type="button" id="button" value="Get objects" />
<div id="objects-wrapper"></div>
服务器的Json响应:
[
{
"id": 16,
"name": "eeeee",
},
{
"id": 17,
"name": "MIT Top New"
}
]
$(document).ready(function() {
$('#button').click(function() {
var id = $(this).attr('id');
var posting = $.post('/get/objects', {
id: id
});
posting.done(function(data) {
var objectsWrapper = $('#objects-wrapper');
objectsWrapper.empty();
if (data.length == 0) {
$(objectsWrapper).html('No objects found...');
} else {
$(objectsWrapper).empty();
for (i = 0; i < data.length; i++) {
var object = $('<div class="object"><a href="#" name="' + data[i].name + '" class="object-link" id="' + data[i].id + '">' + data[i].name + '</a></div>').on('click', function() {
var objectId = $(this).attr('id'); // <-- is present
var name = $(this).attr('name'); // <-- undefined
// do something with name
});
objectsWrapper.append(object);
}
}
});
return false;
});
});
该name
值存在并且被用作锚文本。 我已经验证为以下标记:
<a href="#" name="MIT Top New" description="MIT Top News" class="object-link" id="17">MIT Top New</a>
如何正确获得动态创建的锚元素的属性name
?
您可以使用jQuery的.find()
在DOM中使用选择器查找元素并使之工作
这是您的数据的示例。
var data = [ { "id": 16, "name": "eeeee", }, { "id": 17, "name": "MIT Top New" } ]; data.forEach(e=>{ $("#objects-wrapper").append(` </br> <a href="#" name="${e.name}"> ${e.name} </a> </br>`) }); $("#button").click(function(){ $("#objects-wrapper").find("a").each(function(){ console.log($(this).attr("name")) }) })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <input type="button" id="button" value="Get objects" /> <div id="objects-wrapper"></div>
顺便说一下,在代码中,为什么需要从DOM中获取它? 您是自己分配名称的,为什么不使用它呢? data[i].name
这是正确的名称。 使用它而不是再次从DOM中获取
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.