ฉันใหม่สำหรับ jQuery และกำลังทำพาเนลแบบแท็บตามด้วยบทช่วยสอนในJavaScript และ jQuery: The Missing Manualมีบรรทัดแรกที่ผู้เขียนทำสิ่งนี้:
var target = $(this);
แต่ฉันพยายามทำอย่างนั้น
var target = evt.target;
และฉันได้รับข้อผิดพลาดนั้น:
Uncaught TypeError: Object http://localhost/tabbedPanels/#panel1 has no method 'attr'
และเมื่อฉันเปลี่ยนevt.target
กลับไป$(this)
เป็นมันทำงานเหมือนมีเสน่ห์
ฉันอยากรู้ว่าอะไรคือความแตกต่างระหว่าง$(this)
และevt.target
?
นี่คือรหัสของฉันในกรณีที่คุณต้องการ:
index.html:
<!DOCTYPE html>
<html>
<head>
<title>Tabbed Panel</title>
<style>
body {
width : 100%;
height: 100%;
}
#wrapper {
margin : auto;
width : 800px;
}
#tabsContainer {
overflow: hidden;
}
#tabs {
padding:0;
margin:0;
}
#tabs li {
float : left;
list-style:none;
}
#tabs a {
text-decoration:none;
padding : 3px 5px;
display : block;
}
#tabs a.active {
background-color : grey;
}
#panelsContainer {
clear: left;
}
#panel1 {
color : blue;
}
#panel2 {
color : yellow;
}
#panel3 {
color: green;
}
#panel4 {
color : black;
}
</style>
<script type="text/javascript" src="jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="wrapper">
<div id="tabsContainer">
<ul id="tabs">
<li><a href="#panel1">Panel1</a></li>
<li><a href="#panel2">Panel2</a></li>
<li><a href="#panel3">Panel3</a></li>
<li><a href="#panel4">Panel4</a></li>
</ul>
</div>
<div id="panelsContainer">
<div id="panel1" class="panel">
this is panel1
</div>
<div id="panel2" class="panel">
this is panel2
</div>
<div id="panel3" class="panel">
this is panel3
</div>
<div id="panel4" class="panel">
this is panel4
</div>
</div>
</div>
</body>
</html>
script.js:
$(function(){
$("#tabs a").click(function(evt){
var target = evt.target,
targetPanel = target.attr("href");
$(".panel").hide();
$("#tabs a.active").removeClass("active");
target.addClass("active").blur();
$(targetPanel).fadeIn(300);
evt.preventDefault();
});
$("#tabs a:first").click();
})
$(evt.target)
และ (ในกรณีนี้) จบลงด้วยผลลัพธ์เดียวกันเช่นกัน .attr()
วิธีการให้บริการโดยวัตถุ jQuery ไม่องค์ประกอบของตัวเอง
this
เป็นการอ้างอิงถึงองค์ประกอบ JavaScript DOM$()
เป็นรูปแบบที่ให้บริการโดย jQuery เพื่อเปลี่ยนองค์ประกอบ DOM เป็นวัตถุ jQuery ใช้evt.target
คุณกำลังอ้างอิงองค์ประกอบในขณะที่$(this)
คุณกำลังอ้างอิงวัตถุที่มีพารามิเตอร์ที่เราสามารถเข้าถึงได้