【发布时间】:2014-08-08 13:25:16
【问题描述】:
我正在使用 jQuery 向列表项添加属性。我稍后在代码中尝试通过搜索我刚刚添加的属性来访问这些列表项,但我得到“未定义不是函数”。
编辑:
这是我的代码的较大部分,因此您可以看到到底发生了什么:
var listItems = $('#list li');
area = '';
subarea = '';
for (var i in areas) {
if (areas.hasOwnProperty(i)) {
area = areas[i].area;
listItems.find(".area:containsi('" + area + "')").each(function(e)
{
for (var j = areas[i].subareas.length - 1; j >= 0; j--)
{
subarea = areas[i].subareas[j];
$(this).closest("li").attr("data-area", $(this).closest("li").attr("data-area") + subarea + ' ');
}
console.log($(this).closest("li").attr("data-area"));
});
}
}
$('#search-input-field').on( {
focus: function()
{
$(this).data('placeholder',$(this).attr('placeholder'));
$(this).attr('placeholder','');
},
blur: function()
{
$(this).attr('placeholder',$(this).data('placeholder'));
},
keyup: function()
{
var searchTerm = $(this).val();
var searchSplit = searchTerm.replace(/ /g, "'):containsi('");
listItems.attr("data-area").not(":containsi('" + searchSplit + "')").each(function(e)
{
$(this).addClass('hidden');
});
所以基本上我正在搜索列表项内的类中包含的内容,并向列表项数据添加属性。稍后我会搜索包含特定数据的列表项。
for循环中使用的变量area是一个包含子区域信息的数组,如下所示:
areas = array(ID:{area, array(subareas)})
“containsi”只是“contains”的扩展版本,可以完美运行,所以这不是问题。
我注意到我添加的数据属性没有显示在源代码中,让我相信 jQuery 以其他方式保存这些属性。我想这就是我收到错误的原因(因为 DOM 中不存在搜索的属性)。
有什么想法吗?
/奥洛夫
【问题讨论】:
-
无法理解整个逻辑。请分享更多代码,因为 $(this) 让我们感到困惑。
-
@ArunPJohny,根据 OP “containsi”只是“contains”的扩展版本,可以完美运行,所以这不是问题。
-
.attr()返回一个字符串,因此您不能使用.each()循环遍历它。您能否展示一个数据示例以及循环遍历它应该做什么? -
@Juhana 看到我的编辑,现在更清楚了吗?
标签: jquery search attributes undefined