JQuery 父位置更改时删除元素
JQuery Remove Element When Parent Position Changes
我正在制作一个带有粘性导航栏的网站,当导航栏到达页面顶部(用户向下滚动)时会出现一个符号,当导航栏离开页面顶部(用户滚动)时会消失向上)。到目前为止,我可以使符号出现但不会重新出现。
下面是js代码和导航的HTML:
$(document).ready(function() {
var distance = $('#navbar').offset().top,
$window = $(window);
$(window).scroll(function() {
if ($window.scrollTop() < distance) {
$("#nav").remove(
"<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
}
if ($window.scrollTop() >= distance) {
if ($("#navSymbol").length) {
console.log("not adding")
} else {
$("#nav").prepend(
"<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
}
}
});
});
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<div style="height: 25vw;"></div>
<div class="sticky-top" id="navbar" style="padding-top: 3vw; padding-bottom: 3vw; background-color: white;">
<ul class="nav justify-content-center sticky-top" id="navcontent">
<li class="nav-item">
<a class="nav-link active" id="nav" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Staffing</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Marketing and Finance</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Future Prospects</a>
</li>
</ul>
</div>
<div style="height: 100vw;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
希望有人能帮忙!
当您调用 remove 方法时,您现在并没有删除您的节点。
- 没有参数的 remove 方法正在删除当前节点。
- 带有参数的 remove 方法正在从提供的选择器中删除元素。
通过提供 HTML,您将为未附加到 DOM 文档的节点生成一个选择器。由于他不在那里,删除它没有任何影响。
您可以尝试这样的操作:
$(document).ready(function() {
var distance = $('#navbar').offset().top,
$window = $(window);
$(window).scroll(function() {
if ($window.scrollTop() < distance) {
$("#navSymbol").remove();
}
if ($window.scrollTop() >= distance) {
if ($("#navSymbol").length) {
console.log("not adding")
} else {
$("#nav").prepend("<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
}
}
});
您也可以使用 jQuery 隐藏功能隐藏您的元素。并用 show 函数再次显示。
$(document).ready(function() {
var previous_distance = 0;
$(window).scroll(function() {
var distance = $('#navbar').offset().top;
if (previous_distance < distance) {
$("#navSymbol").hide();
}
else {
$("#navSymbol").show();
}
previous_distance = distance
});
});
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<div style="height: 25vw;"></div>
<div class="sticky-top" id="navbar" style="padding-top: 3vw; padding-bottom: 3vw; background-color: white;">
<ul class="nav justify-content-center sticky-top" id="navcontent">
<li id="navSymbol"><a href=\"#\">▲</a></li>
<li class="nav-item">
<a class="nav-link active" id="nav" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Staffing</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Marketing and Finance</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Future Prospects</a>
</li>
</ul>
</div>
<div style="height: 100vw;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
您的代码中有一个错误 'remove' 方法删除了 jQuery 集合中包含的节点,该集合在调用 'remove()' 时发起了调用。
你可以使用
$("#nav").text("About");
而不是
$("#nav").remove(
"<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
$(document).ready(function() {
var distance = $('#navbar').offset().top,
$window = $(window);
$(window).scroll(function() {
if ($window.scrollTop() < distance) {
$("#navSymbol").remove();
}
if ($window.scrollTop() >= distance) {
if ($("#navSymbol").length) {
console.log("not adding")
} else {
$("#nav").prepend(
"<li id=\"navSymbol\" ><a href=\"#\">▲</a></li>");
}
}
});
});
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<div style="height: 25vw;"></div>
<div class="sticky-top" id="navbar" style="padding-top: 3vw; padding-bottom: 3vw; background-color: white;">
<ul class="nav justify-content-center sticky-top" id="navcontent">
<li class="nav-item">
<a class="nav-link active" id="nav" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Staffing</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Marketing and Finance</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Future Prospects</a>
</li>
</ul>
</div>
<div style="height: 100vw;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
请使用 remove() 函数删除任何元素,因为 jquery 给出了删除特定元素的函数。
我正在制作一个带有粘性导航栏的网站,当导航栏到达页面顶部(用户向下滚动)时会出现一个符号,当导航栏离开页面顶部(用户滚动)时会消失向上)。到目前为止,我可以使符号出现但不会重新出现。
下面是js代码和导航的HTML:
$(document).ready(function() {
var distance = $('#navbar').offset().top,
$window = $(window);
$(window).scroll(function() {
if ($window.scrollTop() < distance) {
$("#nav").remove(
"<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
}
if ($window.scrollTop() >= distance) {
if ($("#navSymbol").length) {
console.log("not adding")
} else {
$("#nav").prepend(
"<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
}
}
});
});
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<div style="height: 25vw;"></div>
<div class="sticky-top" id="navbar" style="padding-top: 3vw; padding-bottom: 3vw; background-color: white;">
<ul class="nav justify-content-center sticky-top" id="navcontent">
<li class="nav-item">
<a class="nav-link active" id="nav" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Staffing</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Marketing and Finance</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Future Prospects</a>
</li>
</ul>
</div>
<div style="height: 100vw;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
希望有人能帮忙!
当您调用 remove 方法时,您现在并没有删除您的节点。
- 没有参数的 remove 方法正在删除当前节点。
- 带有参数的 remove 方法正在从提供的选择器中删除元素。
通过提供 HTML,您将为未附加到 DOM 文档的节点生成一个选择器。由于他不在那里,删除它没有任何影响。
您可以尝试这样的操作:
$(document).ready(function() {
var distance = $('#navbar').offset().top,
$window = $(window);
$(window).scroll(function() {
if ($window.scrollTop() < distance) {
$("#navSymbol").remove();
}
if ($window.scrollTop() >= distance) {
if ($("#navSymbol").length) {
console.log("not adding")
} else {
$("#nav").prepend("<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
}
}
});
您也可以使用 jQuery 隐藏功能隐藏您的元素。并用 show 函数再次显示。
$(document).ready(function() {
var previous_distance = 0;
$(window).scroll(function() {
var distance = $('#navbar').offset().top;
if (previous_distance < distance) {
$("#navSymbol").hide();
}
else {
$("#navSymbol").show();
}
previous_distance = distance
});
});
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<div style="height: 25vw;"></div>
<div class="sticky-top" id="navbar" style="padding-top: 3vw; padding-bottom: 3vw; background-color: white;">
<ul class="nav justify-content-center sticky-top" id="navcontent">
<li id="navSymbol"><a href=\"#\">▲</a></li>
<li class="nav-item">
<a class="nav-link active" id="nav" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Staffing</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Marketing and Finance</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Future Prospects</a>
</li>
</ul>
</div>
<div style="height: 100vw;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
您的代码中有一个错误 'remove' 方法删除了 jQuery 集合中包含的节点,该集合在调用 'remove()' 时发起了调用。
你可以使用
$("#nav").text("About");
而不是
$("#nav").remove(
"<li id=\"navSymbol\"><a href=\"#\">▲</a></li>");
$(document).ready(function() {
var distance = $('#navbar').offset().top,
$window = $(window);
$(window).scroll(function() {
if ($window.scrollTop() < distance) {
$("#navSymbol").remove();
}
if ($window.scrollTop() >= distance) {
if ($("#navSymbol").length) {
console.log("not adding")
} else {
$("#nav").prepend(
"<li id=\"navSymbol\" ><a href=\"#\">▲</a></li>");
}
}
});
});
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<div style="height: 25vw;"></div>
<div class="sticky-top" id="navbar" style="padding-top: 3vw; padding-bottom: 3vw; background-color: white;">
<ul class="nav justify-content-center sticky-top" id="navcontent">
<li class="nav-item">
<a class="nav-link active" id="nav" href="#about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Staffing</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Marketing and Finance</a>
</li>
<li class="nav-item">
<a class="nav-link" id="nav" href="#">Future Prospects</a>
</li>
</ul>
</div>
<div style="height: 100vw;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous">
</script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous">
</script>
请使用 remove() 函数删除任何元素,因为 jquery 给出了删除特定元素的函数。