jQuery:value.attr不是一个函数
我有这个在我的网页剪下来:
$('#category_sorting_form_save').click(function(){ var elements = $("#category_sorting_elements > div"); $.each(elements, function(key, value) { console.info(key," : ",value); console.info("cat_id: ",value.attr('cat_id')); }); });
当它被执行时,我得到:
0 : <div class="dragable" cat_id="6" value="" style="opacity: 1;"> value.attr is not a function console.info("cat_id: ",value.attr('cat_id'));
我在这里做错了什么? 我正在尝试获取div.cat_id元素的值。
谢谢 :)
埃里克
该jQuery对象的内容是纯DOM元素,它不响应jQuery方法(例如.attr
)。 你需要用$()
来包装这个值,把它变成一个jQuery对象来使用它。
console.info("cat_id: ", $(value).attr('cat_id'));
或者直接使用DOM方法
console.info("cat_id: ", value.getAttribute('cat_id'));
你正在处理原始DOM元素..需要将其包装在一个jQuery对象
console.info("cat_id: ",$(value).attr('cat_id'));
传递给each()的callback函数的第二个参数将包含实际的DOM元素,而不是一个jQuery包装器对象。 你可以调用元素的getAttribute()方法:
$('#category_sorting_form_save').click(function() { var elements = $("#category_sorting_elements > div"); $.each(elements, function(key, value) { console.info(key, ": ", value); console.info("cat_id: ", value.getAttribute('cat_id')); }); });
或者你自己把这个元素包装在一个jQuery对象中:
$('#category_sorting_form_save').click(function() { var elements = $("#category_sorting_elements > div"); $.each(elements, function(key, value) { console.info(key, ": ", value); console.info("cat_id: ", $(value).attr('cat_id')); }); });
或者简单地使用$(this)
:
$('#category_sorting_form_save').click(function() { var elements = $("#category_sorting_elements > div"); $.each(elements, function() { console.info("cat_id: ", $(this).attr('cat_id')); }); });
- 奇怪的JavaScript成语 – “/xyz/.test(function(){xyz;})”是做什么的?
- 如何使用dataTables.js库隐藏“显示N个条目中的1个”
- 我如何将parameter passing给JavaScript中的匿名函数?
- RegisterStartupScript和RegisterClientScriptBlock之间的区别?
- AngularJS指令不会更新范围variables更改
- 从本身内部引用javascript函数
- 定义一个使用JQuery追加的HTML模板
- 如何从HTML中删除/replaceangular2组件的select器标签
- var.replace不是一个函数