通过选择兄弟姐妹来扭转jquery

时间:2013-06-06 21:05:36

标签: jquery show-hide dokuwiki

这是为了自定义dokuwiki,我有这个代码(https://www.dokuwiki.org/tips:clicknshow),我想“反向”。因此,单击标题将关闭所有其他标题,从而使打印更清晰。

jQuery(function(){
  jQuery('h2,h3,h4,h5,h6').css('cursor','pointer').click(function(){
    var tag=this.tagName, 
        tagIdx=parseInt(tag.match(/\d/)[0],10), 
        clicknshow=jQuery(this).data('clicknshow') || false,
        fname=clicknshow?'show':'hide';

    jQuery(this).data('clicknshow',!clicknshow).nextAll().each(function(){
        var jqNode=jQuery(this);
        if (jqNode.is(':header')){
          var hIdx=parseInt(this.tagName.match(/\d/)[0],10);
          if (hIdx<=tagIdx) { return false; }
          jqNode.data('clicknshow',!clicknshow);
        }
        jqNode[fname]();
    });
  });
});

经过一天的尝试后,我需要意识到我根本不知道jscript,我需要帮助。 您可以在此处编辑一部分工作代码。 http://jsfiddle.net/W35ny/

2 个答案:

答案 0 :(得分:1)

尝试this one

$("h3").click(function(){
    $(this).siblings("div").hide();
    $(this).next().show();
});

转到第二个问题this one(如果再次点击则显示所有问题):

$("h3").click(function(){

    if($(this)[0].getAttribute("DivShown")== "true")
    {
        $(this).siblings("div").show();
        $(this)[0].setAttribute("DivShown","false");
    }
    else
    {
        $(this).siblings("div").hide();
        $(this).next().show();
        $(this)[0].setAttribute("DivShown","true");
    }
});

*这段代码看起来非常糟糕,只是解决这个问题的一种棘手方法。

这特别适用于html元素的顺序 (所有<h3><div>都是兄弟,所有<div>都是<h3>的文字) 所以你隐藏所有兄弟<div>然后显示当前<h3>

的下一个

答案 1 :(得分:0)

试试这个

$(function () {
    $("h3[class^=sectionedit]").css('cursor', 'pointer').click(function () {
        var isVisible = $(this).next(".level3").is(":visible");
        $("h3[class^=sectionedit]").next(".level3").hide();
        (isVisible) ? $(this).next(".level3").hide() : $(this).next(".level3").show();
    });
});

DEMO