.replaceWith()用于替换不同链接元素的div中的内容

时间:2014-04-01 18:35:41

标签: javascript jquery html css

我正在尝试根据我点击的链接加载包含不同内容的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');
    }); 
});

3 个答案:

答案 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();
    });
  });
});