【问题标题】:Class of ID Change based on URL - URL Based Image Swap -基于 URL 的 ID 更改类别 - 基于 URL 的图像交换 -
【发布时间】:2011-08-22 00:18:10
【问题描述】:

我想要达到的目标: 根据 URL(即 foo.com/item1),div 元素“logoswap”接收不同的类。

以下是我整理的代码,但似乎完全错误。我无论如何都不是 JS 专业人士,XHTML/CSS 更适合我的速度(一些 PHP)......我不能使用 PHP,即使在 PHP 中是可能的(我知道这是因为我有一个 PHP 版本我需要做的事情,但我无法正确调用 PHP。

我真的只是想根据目录/url 显示不同的徽标...它不一定是 CSS 类调用的背景元素,我只需要不同的图像根据上述 url 变量加载...

  $(function() {
  var url = location.pathname;

  if(url.indexOf('item1') > -1) {
    document.getElementById("logoswap").className += " class1";
   }

  elseif(url.indexOf('item2') > -1) {
    document.getElementById("logoswap").className += "class2";
   }

  elseif(url.indexOf('item3') > -1) {
    document.getElementById("logoswap").className += "class3";
   }

  elseif(url.indexOf('item4') > -1) {
    document.getElementById("logoswap").className += "class4";
   }

  elseif(url.indexOf('item5') > -1) {
    document.getElementById("logoswap").className += "class5";
   }

  else {
    document.getElementById("logoswap").className += "class1";
   }

  });

这就是我所拥有的……丑,我敢肯定。

这就是我在这里的原因,我肯定需要一些帮助。

【问题讨论】:

    标签: javascript css url if-statement


    【解决方案1】:

    通过 URL 路径名分配 CSS 类

    jsfiddle 已设置为 这个解决方案。

    这是一个使用数字表达式(如果可用)的案例。这不适用于上述问题。

    $(function() {
      var rgx = /item(\d+)$/,
          url = location.pathname,
          id = (rgx.test(url)) ? url.match(rgx)[1] : '1';
      $("#logoswap").addClass("class" + id);
    });
    

    更新:

    鉴于新的细节,您可能需要一个值数组,这些值应派生自或完全等于您打算使用的类名。

    $(function(){
      // my favorite way to make string arrays.
      var matches = "brand1 brand2 brand3".split(" "),
          url = location.pathname.match(/\w+$/)[0], // get the last item
          id = matches.indexOf(url),
          className = matches[(id > -1) ? id : 0];
      $("#logoswap").addClass(className);
    });
    

    要完成这项工作,您需要准备一些东西。我将假设路径将以我们在此处概述的数字结尾。默认以1 结尾。您将需要可访问图像。您需要为每种可能性定义样式。


    CSS 设置

    #logoswap {
      height : 200px;
      width : 200px;
    }
    .class1 {
      background-image : url(/path/to/default.jpg);
    }
    .class2 {
      background-image : url(/path/to/second.jpg);
    }
    .brand1 {
      background-image : url(/path/to/brand/1/logo.jpg);
    }
    ...
    

    没有 jQuery

    ​​>

    如果您的代码中没有 jQuery,您可能需要使用 window.onload

    (function(){
      var old = window.onload;
      window.onload = function(){
        old();
        var r = /item(\d+)$/,
            url = location.pathname,
            id = (r.test(url)) ? url.match(r)[1] : '1';
        document.getElementById('logoswap').className += "class" + id;
      };
    })()
    

    我只想在这里花点时间 鼓励任何这样做的人 习惯于常规的代码类型 表达式并学习它们。他们是 遥遥无期最常用的 我发展的跨语言部分 兵工厂。

    【讨论】:

    • 我不能发布完整的代码——因为这还没有实现(只是我们开发的沙盒),我们只是为了争论,唯一的内容是
      我需要更改课程。
    • 抱歉 - 我知道这似乎是一种含糊不清的反应,让我看看我是否不能将一些东西放在一起作为 HTML 视觉效果。
    • 我的朋友,封闭源代码没有错。这有进展吗?我想答案可能是验证类声明是否存在以及图像是否根据这些样式声明存在。我将运行一个快速的 jsFiddle 以确保上述代码有效。另外,也许您可​​以指出您得到的行为类型。我还注意到您正在使用 jQuery 表示法来准备文档。你在加载 jQuery 库吗?
    • 我可能误读了这个问题。你是说你当前的代码不起作用?
    • JQuery 库正在从 Google 加载,也许我应该放弃 JQuery 表示法而去“老派”?
    【解决方案2】:

    仅使用 HTML/CSS,您可以添加(或通过 javascript 附加)id 到页面的 body

    <body id="item1">
    

    然后在你的 CSS 中,创建一个选择器:

    #item1 #logoswap {
        // class1 CSS
    }
    

    【讨论】:

    • 如果我的页面不是动态生成的,我可以这样做,这意味着我无法“直接”访问需要调用这些类更改的各个页面。
    【解决方案3】:

    你所拥有的并没有什么问题。你可以用下面的东西来整理它。

    $(function() {
        var url = location.pathname;
        var logo = document.getElementById("logoswap");
        var i = 6;
    
        logo.className = "class1";
    
        while(i--)
        {
            if(url.indexOf("item" + i) > -1) {
                logo.className = "class" + i;
            }
        }
    });
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签