我避免使用$(this).attr()
来获取自定义元素的值,并且我已经读过,如果您需要自定义元素,则应在其前面添加data-
并使用{{1访问该元素的内容(在我的例子中,它被动态填充到元素中,因为元素是一组动态元素的一部分)
我的问题很简单。
$(this).data()
我在捕获它们之后将值记录到控制台,但不出所料,<a id="' + node.Id + '" data-currentValue='+node.Name+' class="button icon-pencil with-tooltip" href="javascript:void(0);" title="Edit" onclick="UpdateAttributes($(this).data(\'currentValue\'), $(this).attr(\'id\'));"</a>
部分返回undefined(值应该在此测试用例$(this).data()
中),并且id返回我期望的值返回(在我的情况下,"asdf"
)。
这个元素有什么问题?我无法找出出错的地方,我不知道为什么它会抛出未定义的,我需要2000046
内的值。分享的任何想法和见解,以便我可以从data-currentValue
获得我需要的价值?
动态元素整体:
data-currentValue
修改
所以我想到的这种方法是笨拙和繁琐的(感谢BlazeMonger确认.data()尝试将所有内容转换为原始类型,所以我改变了我的代码以使用关联数组来访问我所在的信息需要它。我不再需要元素中的自定义属性。
$("#tblAttributes tbody").empty();
var tableContents = [];
$.each(data.KeyValuePairs, function (i, node) {
tableContents[tableContents.length] = '<tr>';
tableContents[tableContents.length] = '<td>';
tableContents[tableContents.length] = '<p>';
tableContents[tableContents.length] = node.Name;
tableContents[tableContents.length] = '</p>';
tableContents[tableContents.length] = '</td>';
tableContents[tableContents.length] = '<td>';
tableContents[tableContents.length] = '<span class="button-group compact">';
tableContents[tableContents.length] = '<a id="' + node.Id + '" data-currentValue='+node.Name+' class="button icon-pencil with-tooltip" href="javascript:void(0);" title="Edit" onclick="UpdateAttributes($(this).data(\'currentValue\'), $(this).attr(\'id\'));"</a>';
tableContents[tableContents.length] = '<a id="' + node.Id + '" class="button red-gradient icon-trash with-tooltip confirm" href="javascript:DeleteAttribute('+node.Id+');" title="Delete" </a>';
tableContents[tableContents.length] = '</span>';
tableContents[tableContents.length] = '</td>';
tableContents[tableContents.length] = '</tr>';
});
$("#AttributeCount").html(data.KeyValuePairs.length);
$("#tblAttributes tbody").append(tableContents.join(""));
答案 0 :(得分:2)
.data()
方法在页面加载时检索data-
HTML属性一次。之后,您可以更改data-
属性,但不会更改data()
检索到的内容。
而是使用.data(name,value)
设置.data(name)
将检索的新值。 (另请注意,这不会同时更改data-
HTML属性。您可以更改其中一个。)
jQuery可能有一些方法可以同时自动将当前data-
属性拉入data()
个变量,但从jQuery 1.9开始,不存在这样的内置功能。但不应该写一个。