我正在尝试根据我点击的链接加载包含不同内容的div ...
虽然单击它时它似乎适用于第一个链接,但单击其他链接只会替换“encodeMe”的相同内容的内容,但我已指定了我想替换为'htmlize-me的不同内容“
我的第一次运行我没有使用jQuery的.bind()函数。我只是使用.click(),两者都有相同的结果。通过jQuery API,我认为使用.bind()函数会将其中的每个函数绑定到该特定的页面元素,但它似乎将它应用于我的所有链接。
我使用.hide和.show来切换div也达到了同样的效果,但是我想要更优雅地做到这一点,这是我尝试过的替代方案......
这是相关的html:
<label for="list-root">App Hardening</label>
<input type="checkbox" id="list-root" />
<ol>
<li id="encode-me"><a class="show-popup" href="#">encodeMe()</a></li>
<li id="htmlize-me"><a class="show-popup" href="#">htmlizeMe()</a></li>
</ol>
<div class="overlay-bg">
<div class="overlay-content">
<div class="the-content"></div>
<br><button class="close-button">Close</button>
</div>
</div>
这是我用来触发内容更改的脚本:
$('#encode-me').bind('click' , function() {
$('div.the-content').replaceWith('<h3 style="color: #008ccc;"> function encodeMe( string ) </h3>' +
'Found in <p>[web root]/redacted/redacted.asp</p>');
});
});
$('#htmlize-me').bind('click' , function() {
$('div.the-content').replaceWith('Hi, Im something different');
});
});
答案 0 :(得分:3)
尝试这样的事情:
使用html()
代替replaceWith()
$('#encode-me').bind('click' , function() {
$('div.the-content').html('<h3 style="color: #008ccc;"> function encodeMe( string ) </h3>' +
'Found in <p>[web root]/redacted/redacted.asp</p>');
});
});
$('#htmlize-me').bind('click' , function() {
$('div.the-content').html("Hi, I'm something different");
});
});
答案 1 :(得分:3)
replaceWith
完全听起来像它,用h3替换div,所以当你点击第二个链接时没有div。
尝试设置innerHTML
$('#encode-me').on('click' , function() {
$('div.the-content').html('<h3 style="color: #008ccc;"> function encodeMe( string ) </h3>Found in <p>[web root]/redacted/redacted.asp</p>');
});
$('#htmlize-me').on('click' , function() {
$('div.the-content').html('Hi, I\'m something different');
});
答案 2 :(得分:0)
所以我想出了一个更聪明的方法来做到这一点!使用DOM有利于您 - 设置嵌套列表结构并使用.find()在列表中的父元素和子元素上更改内容。
<强>标记强>
<span style="font-size:1.4em">Type
<ul class="row">
<li><a href="#" class="show-popup">Blah</a>
<div class="overlay-content">
<p><a href="#" class="close"></a></p>
<p class="changeText">Blah</p>
</div>
</li>
<li><a href="#" class="show-popup">Blah2</a>
<div class="overlay-content">
<p><a href="#" class="close"></a></p>
<p class="changeText">Blah2</p>
</div>
</li>
</ul>
</span><br>
<!-- OVERLAYS -->
<div class="overlay"></div>
<强> CSS 强>
.close {
border-radius: 10px;
background-image: url(../img/close-overlay.png);
position: absolute;
right:-10px;
top:-15px;
z-index:1002;
height: 35px;
width: 35px;
}
.overlay {
position:absolute;
top:0;
left:0;
z-index:10;
height:100%;
width:100%;
background:#000;
filter:alpha(opacity=60);
-moz-opacity:.60;
opacity:.60;
display:none;
}
.overlay-content {
position:fixed!important;
width: 60%;
height: 80%;
top: 50%;
left: 50%;
background-color: #f5f5f5;
display:none;
z-index:1002;
padding: 10px;
margin: 0 0 0 -20%;
cursor: default;
border-radius: 4px;
box-shadow: 0 0 5px rgba(0,0,0,0.9);
}
<强>脚本强>
$(document).ready(function(){
$('.show-popup').click(function() {
var ce = this;
$('.overlay').show('slow', function() {
$(ce).parent().find('.overlay-content').fadeIn('slow');
});
});
// show popup when you click on the link
$('.show-popup').click(function(event){
event.preventDefault(); // disable normal link function so that it doesn't refresh the page
var docHeight = $(document).height(); //grab the height of the page
var scrollTop = $(window).scrollTop(); //grab the px value from the top of the page to where you're scrolling
$('.overlay').show().css({'height' : docHeight}); //display your popup and set height to the page height
$('.overlay-content').css({'top': scrollTop+100+'px'}); //set the content 100px from the window top
});
/*
// hides the popup if user clicks anywhere outside the container
$('.overlay').click(function(){
$('.overlay').hide();
})
*/
// prevents the overlay from closing if user clicks inside the popup overlay
$('.overlay-content').click(function(){
return false;
});
$('.close').click(function() {
$('.overlay-content').hide('slow', function() {
$('.overlay').fadeOut();
});
});
});