Javascript jquery中的DOM读取
我正在尝试做一个过滤器,它将显示或隐藏标签中的Javascript jquery中的DOM读取,javascript,jquery,html,Javascript,Jquery,Html,我正在尝试做一个过滤器,它将显示或隐藏标签中的数据类型 以下是我的Javascript: var course_difficulty_level_filter= function(el,level) { this.el = el; this.el.closest('#courses_content').find("div").hide(); if(level != "00"){ this.el.closest('#courses_content').fi
数据类型
以下是我的Javascript:
var course_difficulty_level_filter= function(el,level)
{
this.el = el;
this.el.closest('#courses_content').find("div").hide();
if(level != "00"){
this.el.closest('#courses_content').find('div[data-difficulty="'+level+'"]').show();
console.log("show difficulty_level : "+ level);
} else {
this.el.closest('#courses_content').find("div").show();
console.log("show difficulty_level : all");
};
}
$('#course_filter_level1').click(function(){
$(this).click(course_difficulty_level_filter($(this),"1"));
});
这是我的HTML:
<div id="coursefilter">
<div id="coursefilter_content" class="hide">
<div id="coursefilter_content_text">
<div id="course_filter_level_text"><p class="course_filter">Level: </p></div>
</div>
<div id="coursefilter_content_icons">
<div id="course_filter_level">
<div id="course_filter_level1" class="opacityquarter">
<div id="level1_rectangle1"></div>
<div id="level1_rectangle2"></div>
<div id="level1_rectangle3"></div>
<div id="level1_rectangle4"></div>
</div>
</div>
</div>
</div>
</div>
<!--Courses - Course Overviews-->
<div id="courses">
<div id="courses_content" class="hide">
<div class="course_overview_content_even" data-difficulty="1" data-lang="en"></div>
</div>
</div>
级别:
我成功地获得了console.log=>显示难度\u级别:1,因此我的脚本“正常工作”,但我认为它无法在DOM中导航,但我找不到原因。您只是在寻找:
$('div[data-difficulty="'+level+'"]').show();
$('div[data-difficulty="'+level+'"]').hide();
jQuery对查询HTML属性有丰富的支持:您只是在寻找:
$('div[data-difficulty="'+level+'"]').show();
$('div[data-difficulty="'+level+'"]').hide();
jQuery对查询HTML属性有丰富的支持:我认为这段代码就是问题所在:
this.el.closest('#courses_content')
该函数备份父级以查找选择器,但#courses\u content
不是#courseu filter\u level1
(作为el
传入的值)的父级
尝试将这些引用更改为:
$('#courses_content')
应该不需要相对于传入元素查找此元素,因为我希望只有一个div的idcontent
,因为id在文档中应该是唯一的
整个功能可以更改为:
// removed el, so it must be removed from the calling function
var course_difficulty_level_filter= function(level)
{
var coursesContent = $('#courses_content');
coursesContent.find("div").hide();
if(level != "00"){
coursesContent.find('div[data-difficulty="'+level+'"]').show();
console.log("show difficulty_level : "+ level);
} else {
coursesContent.find("div").show();
console.log("show difficulty_level : all");
};
}
我认为这个代码就是问题所在:
this.el.closest('#courses_content')
该函数备份父级以查找选择器,但#courses\u content
不是#courseu filter\u level1
(作为el
传入的值)的父级
尝试将这些引用更改为:
$('#courses_content')
应该不需要相对于传入元素查找此元素,因为我希望只有一个div的idcontent
,因为id在文档中应该是唯一的
整个功能可以更改为:
// removed el, so it must be removed from the calling function
var course_difficulty_level_filter= function(level)
{
var coursesContent = $('#courses_content');
coursesContent.find("div").hide();
if(level != "00"){
coursesContent.find('div[data-difficulty="'+level+'"]').show();
console.log("show difficulty_level : "+ level);
} else {
coursesContent.find("div").show();
console.log("show difficulty_level : all");
};
}
您正在尝试将单击
事件处理程序绑定到刚才单击的元素?这有什么意义?另外:您正在调用课程\u难度\u级别\u过滤器
,而不是将其传递给$(此)。单击
,因此绑定将不起作用。如果您只想调用课程(难度)(级别)过滤器
,请执行此操作并删除$(此)。单击
部分。当前情况下,函数中的此
引用全局对象。如果它是一个事件处理程序,它将引用DOM元素,那么将el
分配给全局对象或DOM元素有什么意义呢?您正在尝试将click
事件处理程序绑定到刚才单击的元素?这有什么意义?另外:您正在调用课程\u难度\u级别\u过滤器
,而不是将其传递给$(此)。单击
,因此绑定将不起作用。如果您只想调用课程(难度)(级别)过滤器
,请执行此操作并删除$(此)。单击
部分。当前情况下,函数中的此
引用全局对象。如果它是一个事件处理程序,它将引用DOM元素,那么将el
分配给全局对象或DOM元素有什么意义呢?Chris Hardie有一个很好的观点。上面的代码几乎不可读,我推荐一个好的jQuery学习课程。上面的代码几乎不可读,我推荐一个好的jQuery学习课程。