【问题标题】:Jquery rel toggle?jQuery rel 切换?
【发布时间】:2012-01-06 07:17:51
【问题描述】:

是否可以像在 jquery 中切换类一样切换(切换)rel 属性? http://api.jquery.com/toggleClass/

我正在尝试创建一个按钮,单击该按钮将更改(切换)另一个按钮的 rel 属性。希望这是有道理的。


我对此很陌生,不确定我是否正确地实现了您的代码,但它不起作用。我可能只是把这件事想错了。

我的想法是使用 animatedcollapse.js 插件 (http://www.dynamicdrive.com/dynamici...edcollapse.htm) 为手风琴制作动画。手风琴根据“rel”属性工作,“rel=collapse[selected div]”或“rel=expand[selected div]”。展开或折叠手风琴。其设置方式的问题在于,当一个 div 折叠时,另一个 div 会同时在后台展开。

http://dl.dropbox.com/u/14080718/Final/UITabs10.html

我正在努力做到这一点,因此每次单击新链接时,以前的手风琴都会在展开新的手风琴之前完全折叠。因此,每次点击链接时,前一个 div 在打开新 div 之前都会完全关闭。

我认为“rel=collapse[selected div]”和“rel=expand[selected div]”之间的 rel 切换可能会解决这个问题,但我不确定。如果您有任何其他想法,我很想听听。

【问题讨论】:

  • 按钮没有 rel 属性(因为它们没有href 属性来说明关系是什么资源)。
  • 是的,但您必须编写自己的逻辑。
  • 你用rel做什么(误会?)?
  • 看看 data() 在 DOM 元素中存储“数据”

标签: javascript jquery class toggle rel


【解决方案1】:

我刚刚写了一个jQuery插件。

用法:$("selector").toggleAttr("rel", "option1", "option2");

(function($) {
    $.fn.toggleAttr = function(attribute, option1, option2) {
        return this.each(function() {
            var $this = $(this);
            if ($this.attr(attribute) != option1) {
                $this.attr(attribute, option1);
            } else {
                $this.attr(attribute, option2);
            }
        });
    }
})(jQuery);

【讨论】:

  • dl.dropbox.com/u/14080718/Final/UITabs11.html 我认为我没有正确使用您的插件。我究竟做错了什么?感谢您的帮助!
  • 一个非常常见的错误,以及我的插件的错误用法:您在文档加载之前执行代码。使用 $(document).ready(function(){$("#button").toggleAttr("rel", "expand[thumb1]", "collapse[thumb1]")});。另见:api.jquery.com/ready
  • Rob- 代码是天才!谢谢您的帮助!有没有办法关闭该功能,所以当我点击页面上的另一个链接时,rel 会回到原来的状态?基本上,我希望每个 div 在打开另一个 div 之前完全关闭。那有意义吗? dl.dropbox.com/u/14080718/Final/UITabs11.html
  • “回到原来的样子”是什么意思?只需再次调用 .toggleAttr("rel", "option1", "option2") 即可恢复更改。
  • 此链接可能会提供一些清晰度stackoverflow.com/questions/1262919/… 我想做同样类型的事情,但要更改 rel 属性。我只希望活动链接将 rel 应用于它。那有意义吗?对不起,我的语言不太好。这实际上是我第一次使用 Jquery。谢谢
【解决方案2】:
//global flag to check condition
var flag = true;

$('#yourelement').click(function(){
           if(flag == true){
                flag = false;
                $('#yourotherelement').attr('rel', newValue);         
           }else{
                flag = true;
                $('#yourotherelement').attr('rel', oldValue);
          }
});

【讨论】:

  • 全局标志?呃。现在您将相同的信息存储在两个位置,其中一个位置会阻止代码被轻松重用。
【解决方案3】:

你可能想要这个,

$(document).ready(function(){
  $(".buttonToggle").click(function(){
    var relAttribute = $(".buttonYouWanttotogglerelattr").attr("rel"); 
  //gets current rel
    if(relAttribute == "value1"){
     $(".buttonYouWanttotoggleRelattr").attr("rel","value2"); 
     //if its value1 change it to value2
     }
    else
     {
     $(".buttonYouWanttotoggleRelattr").attr("rel","value2");
     }
  });
});

【讨论】:

  • if(var = "value1"){?是什么?!
  • 啊,这个答案已被编辑。所以……if(relAttribute = "value1"){?是什么?!
  • @Mohammed,您必须使用===== 来测试变量是否相等。目前,您将"value1" 分配给relAttribute
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多