【问题标题】:Create link to specific jQuery tab创建指向特定 jQuery 选项卡的链接
【发布时间】:2021-06-05 07:11:17
【问题描述】:

我环顾四周并尝试了一些关于 jQuery 选项卡的类似帖子,但我无法让我的代码以相同的方式工作。下面是我正在使用的。目标是让链接打开正确的选项卡。

标签的链接:

 <li><a onClick="$('.tabs').selectorr('.about', 250).click()" href="#">About Us</a></li>

我的标签的代码:

<ul class="tabs">
            <li>
                <h3>Games</h3>
                <div class="split">
                        <p>Current Games</p>
                        <div>Tab 1 content</div>                        
                </div>
            </li>
            <li>
                <h3 class="about">Who We Are</h3>
                <div class="split reversed">
                        <div>Tab 2 content</div>
                </div>
            </li>
</ul>

我的 main.js 调用选项卡:这是在页面初始加载时调用的,它选择第一个 h3

    $('.tabs').selectorr({
        titleSelector: 'h3',
        delay: 250
    });

选择器函数:

/* jquery.selectorr v0.2 | (c) @ajlkn | MIT licensed */
!function(e){
    e.fn.selectorr=function(t){
        var i=e(this),s=e.extend({
            titleSelector:".title",delay:0
        },t);
        if(0==this.length)
            return i;
        if(this.length>1){
            for(var a=0;a<this.length;a++)e.selectorr(e(this[a]),s);
            return i
        }
        return e.selectorr(i,s)
    },e.selectorr=function(t,i){
        var s,a,l,n=t.children("li"),r=e('<div><ul class="titles"></ul><div class="panels"></div></div>').insertAfter(t),c=r.find(".titles"),d=r.find(".panels"),o=0,v=!1;(l=n.filter(".active")).length>0&&(o=l.index()),n.each(function(t){
            var l,n,r,f,u=e(this);
            r=u.find(i.titleSelector),f=r.attr("href"),l=e('<li class="title">'+r.html()+"</li>"),c.append(l),r.remove(),l.css("cursor","pointer"),u.wrapInner('<div class="panel" />'),n=u.children("div"),n.appendTo(d),l.on("click",function(e){
                if(v||l.hasClass("active"))return!1;
                if(f)return location.href=f,!1;v=!0,s.removeClass("active"),l.addClass("active");
                var t=a.filter(".active");
                return t.length>0?(t.removeClass("active"),setTimeout(function(){
                    t.css("display","none"),n.show(),n.addClass("active"),setTimeout(function(){
                        v=!1},i.delay)
                },i.delay)):(n.css("display",""),n.addClass("active"),setTimeout(function(){
                    v=!1
                },i.delay)),!1
            }),t==o?(l.addClass("active"),n.addClass("active")):n.css("display","none")
        }),r.attr("id",t.attr("id")).attr("class",t.attr("class")),t.remove(),s=c.find(".title"),a=d.find(".panel")
    }
}(jQuery);

【问题讨论】:

    标签: html jquery hyperlink tabs


    【解决方案1】:

    您的插件替换以前的 html 并添加新的 html,即:&lt;li class="title"&gt;..&lt;/li&gt; 所以 .about 不存在于您的 dom 中。相反,您可以使用 '$(".titles li:eq(1)").trigger("click")' 触发第二个 li 即:关于选项卡。

    演示代码

    /* jquery.selectorr v0.2 | (c) @ajlkn | MIT licensed */ ! function(e) {
      e.fn.selectorr = function(t) {
        var i = e(this),
          s = e.extend({
            titleSelector: ".title",
            delay: 0
          }, t);
        if (0 == this.length)
          return i;
        if (this.length > 1) {
          for (var a = 0; a < this.length; a++) e.selectorr(e(this[a]), s);
          return i
        }
        return e.selectorr(i, s)
      }, e.selectorr = function(t, i) {
        var s, a, l, n = t.children("li"),
          r = e('<div><ul class="titles"></ul><div class="panels"></div></div>').insertAfter(t),
          c = r.find(".titles"),
          d = r.find(".panels"),
          o = 0,
          v = !1;
        (l = n.filter(".active")).length > 0 && (o = l.index()), n.each(function(t) {
          var l, n, r, f, u = e(this);
          r = u.find(i.titleSelector), f = r.attr("href"), l = e('<li class="title">' + r.html() + "</li>"), c.append(l), r.remove(), l.css("cursor", "pointer"), u.wrapInner('<div class="panel" />'), n = u.children("div"), n.appendTo(d), l.on("click", function(e) {
            if (v || l.hasClass("active")) return !1;
            if (f) return location.href = f, !1;
            v = !0, s.removeClass("active"), l.addClass("active");
            var t = a.filter(".active");
            return t.length > 0 ? (t.removeClass("active"), setTimeout(function() {
              t.css("display", "none"), n.show(), n.addClass("active"), setTimeout(function() {
                v = !1
              }, i.delay)
            }, i.delay)) : (n.css("display", ""), n.addClass("active"), setTimeout(function() {
              v = !1
            }, i.delay)), !1
          }), t == o ? (l.addClass("active"), n.addClass("active")) : n.css("display", "none")
        }), r.attr("id", t.attr("id")).attr("class", t.attr("class")), t.remove(), s = c.find(".title"), a = d.find(".panel")
      }
    }(jQuery);
    
    
    $('.tabs').selectorr({
      titleSelector: 'h3',
      delay: 250
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <ul class="tabs">
      <li>
        <h3>Games</h3>
        <div class="split">
          <p>Current Games</p>
          <div>Tab 1 content</div>
        </div>
      </li>
      <li>
        <h3 class="about">Who We Are</h3>
        <div class="split reversed">
          <div>Tab 2 content</div>
        </div>
      </li>
    </ul>
    <!--click on second li-->
    <a onclick='$(".titles li:eq(1)").trigger("click")' href="#">About Us</a>

    【讨论】:

    • 非常感谢!!!这是我的 home.php 文件。因此,如果我在另一个页面上但想链接到 home.php 的“关于我们”部分,我将如何传递该信息?它是可以在 URL 中传递的东西吗..?我正在使用 CodeIgniter 框架,所以也许它可以通过控制器或 URI 段传递?
    • 嗨,如果您知道需要显示的li,您可以传递li 的索引号,例如如果想先打开li,则通过0 进行第二次传递1 和很快 。然后你只需要在这里使用那个值$(".titles li:eq("+valuewhichpass+")")
    • 那么我将使用 if else 语句来确定我是否在 home.php 页面上,如果不是,则使用 URI 段“valuewhichpass”重定向到 home.php。然后在 Home Controller 中,我可以检查是否存在 URI 段...如果存在则将值传递给 Li,如果不传递值 0。
    • 是的,类似的,看看是否有效
    猜你喜欢
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多