[英]jQuery 'Show More' 'Show Less' code issue
我正在使用下面的 jQuery 代碼在我的網頁上顯示/隱藏額外的文本
jQuery.fn.shorten = function(settings) {
var config = {
showChars : 100,
ellipsesText : "...",
moreText : "more",
lessText : "less"
};
if (settings) {
$.extend(config, settings);
}
$('.morelink').live('click', function() {
var $this = $(this);
if ($this.hasClass('less')) {
$this.removeClass('less');
$this.html(config.moreText);
} else {
$this.addClass('less');
$this.html(config.lessText);
}
$this.parent().prev().toggle();
$this.prev().toggle();
return false;
});
return this.each(function() {
var $this = $(this);
var content = $this.html();
if (content.length > config.showChars) {
var c = content.substr(0, config.showChars);
var h = content.substr(config.showChars , content.length - config.showChars);
var html = c + '<span class="moreellipses">' + config.ellipsesText + ' </span><span class="morecontent"><span>' + h + '</span> <a href="javascript://nop/" class="morelink">' + config.moreText + '</a></span>';
$this.html(html);
$(".morecontent span").hide();
}
});
};
我正在嘗試將其應用於以下 html:
<div id="idcncinfobox" class="cncinfobox">
<div class="basic_cnc_info_layout">
<span class="cncDesc more">asdjlkaj lakjd alkjs dajskldj uiojlksjdf kljsdf jirj klcj sdklfj skldjf rijfkls dj fjsdklfjr iej kldjf sh fbasnmb fa slkjdf dfjkjri wsll l ljdklfjkljsd jskldfj jsdklfj jskldjf jklsdjfklsdj irjklsjdfir lskdjfir jklsjdfkl jsir jklsjdklfjrijklsjdklf</span>
<dl>
<dt>Aliases</dt><dt1>:</dt1><dd itemprop="actor" class="cncAliases more">fasdfsdfssdlkfjskldjf klsjlkdfjklsdj jsdklfj sjdkljf sjkldfdjkl ksdjl; fsdj f;sdkljf sdkl;fj sdkjkfjsdkljfklj jsdkl;fjklsdjfkljdkjfkljdklsjfkldjsklf</dd>
</dl>
</div>
</div>
我使用下面的 js 代碼來調用 jQuery 函數:
$(document).ready(function() {
$(".cncDesc").shorten({
"showChars" : 50,
"moreText" : "See More",
"lessText" : "Less"
});
$(".cncAliases").shorten({
"showChars" : 20,
"moreText" : "See More",
"lessText" : "Less"
});
});
正如你在這里看到的,我試圖在同一頁面上的兩個元素上獲得顯示/隱藏效果。 而且由於某種原因它不起作用。 如果我僅將其應用於一個元素,則效果很好。 我嘗試調試它,發現當我將它應用於兩個元素時,它會進入“單擊”功能兩次並最終取消效果。
我在這里創建了一個小提琴http://jsfiddle.net/RzB7E/4/
我想你可以改變這條線
$('.morelink').live('click', function() {
到
$(this).find('.morelink').live('click', function() {
正如你在這里看到的: http : //jsfiddle.net/RzB7E/7/
當您通過類綁定到點擊事件時,您也綁定了該類的所有元素的所有點擊。 上面的更改指定了要應用點擊的特定.morelink
。
同意@Sberry 的回答,但作為一個建議,使用這個
$(this).find('.morelink').on('click', function() {
從 jQuery v.1.7+ 開始, .live()
方法顯然已被棄用。 詳情在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.