【问题标题】:jQuery show delete display attrjQuery show 删除显示属性
【发布时间】:2014-03-16 20:21:49
【问题描述】:

我正在使用 jQuery 的隐藏和显示功能,但显示功能有问题。

我的 javascript 代码是:

function toggle_visibility(idContent, idLien, question) {
    var c = document.getElementById(idContent);
    var l = document.getElementById(idLien);
    var q = question;
    if(c.style.display == 'block') {
        $("#" + idContent).hide("blind") ;
        l.innerHTML = '<h4><i class=\"icone-rouge icon-right-open-big\"></i>'+ q +'</h4>' ;
    }
    else {
        $("#" + idContent).show("blind") ;
        l.innerHTML = '<h4><i class=\"icone-rouge icon-down-open-big\"></i>'+ q +'</h4>' ;
    }
}

问题在于,当 div 在页面加载时隐藏(显示='none')时,它不适用于隐藏部分。我可以显示该块,但我无法隐藏它。

我注意到当我显示一个内容时,jQuery 删除了我的 html 样式中的显示属性...也许有一个链接。

这里有一个链接例如:http://jsfiddle.net/29c4D/2/

谢谢。

【问题讨论】:

  • 如果您使用 jQuery,为什么要使用纯 JS(例如 document.getElementById(idLien);)?你可以通过正确使用 jQuery 来大大缩短你的代码。
  • 因为我是 jQuery 的初学者并且我使用它作为补充。我不使用很多 jQuery。我知道,这不是一个好的理由。

标签: javascript jquery show-hide


【解决方案1】:

DescampsAu,由于您使用的是 jQuery,我重写了您的代码以充分利用强大的库。您可以在fiddle 中查看示例。

让 jQuery 通过使用 .toggle().slideToggle() 方法来检查元素是否隐藏。

删除 span 中的所有 onClick() 代码并改用这个 jQuery:

jQuery

$(document).ready( function() {
    //After the page has loaded, let jQuery know where all of the spans are.
    var toggleThis = $(".toggleMe");

    //Whenever you click one of the spans do this function.
    toggleThis.click( function() {
        //Register the span you clicked and the next div that holds the hidden stuffs.
        var el = $(this),
            nextDiv = el.next(".toggleMeDiv");

        //Check if the span's partner div is hidden or showing by checking its css "display" value.
        if(nextDiv.css("display") == "block") {
            //Change the text of the span to be its title attribute plus whether its partner is showing or hidden.
            el.html(el.attr("title")+" hidden");
        } else {
            el.text(el.attr("title")+" shown");
        }

        //Let jQuery toggle the partner's visibility.
        nextDiv.slideToggle();
    });
});

HTML

<span class="toggleMe" title="Quest 1">Quest 1</span>
<div class="toggleMeDiv">Boubou1</div>

<span class="toggleMe" title="Quest 2">Quest 2</span>
<div class="toggleMeDiv">Boubou2</div>

【讨论】:

  • 你的小提琴的链接是错误的。这是我在帖子中发布的小提琴。但是,我尝试了您的代码并且它有效。但是当后者被隐藏时,第二个问题紧随第一个问题。而且我不知道如何更改问题标签。
  • 跨度彼此相邻,因为我提供了错误的小提琴链接:p 我现在修复了它,你应该能够看到它的实际效果。我还添加了通过读取跨度标题来更新标签的功能。
  • 非常感谢。你真的很有帮助!我会尝试理解代码。
【解决方案2】:

这对自己来说太难了。

HTML

<span class="toggle" id="lien1" data-original-text="Quest 1">Quest 1</span>
<div id="content1">Boubou1</div>

<span class="toggle" id="lien2" data-original-text="Quest 1">Quest 2</span>
<div  id="content2">Boubou2</div>

JS

$(document).ready( function () {

    $('.toggle').on('click', function() {
        $(this).next('div').toggle('blind', textToggle); // or slideToggle();
    });


    function textToggle() {
        var $target = $(this).prev('span'); // "this" is the div that was toggled.
        var originalText = $target.attr('data-original-text');

        if ( $(this).is(':visible') ) {
            $target.text(  originalText + ' open' );    
        } else {
            $target.text( originalText + ' closed' );
        }   
    }
});

小提琴:http://jsfiddle.net/29c4D/7/

编辑以包含标签+效果。

【讨论】:

  • 他正在更改标签中的文本。
  • 好的。谢谢你。但是如何保持视觉效果呢?以及如何更改我的标签?
  • 更新了答案+小提琴。
  • 感谢威尔的额外解释。我们的代码几乎相同,只是您使用自定义属性,而我依赖 'title' 属性。您的回答促使我在昨天正在处理的页面中进行尝试。自定义属性真的很有帮助。
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 2010-12-19
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多