Soy nuevo en jQuery, y estaba haciendo paneles con pestañas, siguiendo el tutorial en JavaScript y jQuery: The Missing Manual , existe esa primera línea cuando el autor hace esto:
var target = $(this);
Pero traté de hacerlo de esa manera
var target = evt.target;
y recibí ese error:
Uncaught TypeError: Object http://localhost/tabbedPanels/#panel1 has no method 'attr'
Y cuando evt.target
volví a cambiar $(this)
, funcionó a las mil maravillas.
Quiero saber cuál es la diferencia entre $(this)
y evt.target
?
Aquí está mi código en caso de que lo necesite:
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)
y (en este caso) terminar con los mismos resultados también. El .attr()
método es proporcionado por el objeto jQuery, no por el elemento en sí mismo
this
es una referencia al elemento DOM de JavaScript.$()
es el formato proporcionado por jQuery para convertir el elemento DOM en un objeto jQuery. utilizandoevt.target
está haciendo referencia a un elemento, mientras$(this)
que está haciendo referencia a un objeto con parámetros a los que tenemos acceso.