【问题标题】:Replace CSS property with jQuery conditional用 jQuery 条件替换 CSS 属性
【发布时间】:2015-07-22 17:48:02
【问题描述】:

我想更改用于在我的网站上切换语言的链接的背景图片。我的方法是检查标签内的语言代码,然后使用 jQuery 更改背景图像。

下面的代码将背景图像更改为条件语句中的第一个背景图像。但是当条件不满足,并且应该执行第二个语句时,它仍然执行第一个(或以某种方式执行失败)。控制台没有显示错误。

最后一个 li 元素由 PHP 脚本生成,可以根据 cmets 中的建议对其进行调整以包含 -data 属性。这将是一个很好的改进。目前它只是将语言代码作为列表项中的纯文本返回。

HTML

<nav id="top-menu">
  <ul id="menu-top" class="nav et_disable_top_tier sf-js-enabled">
    <li id="menu-item-263"><a href="/">Home</a></li>
    <li id="menu-item-265"><a href="services">Services</a></li>
    <li id="menu-item-412"><a href="/blog/">Blog</a></li>
    <li><a href="/en/" style="background-image: url(https://www.example.nl/wp-content/themes/GH/images/flagUK.gif);">EN</a></li>
  </ul>
</nav>

CSS

ul#menu-top > li:last-child > a {
    text-indent: -9999px;
    display: block;
    height: 12px;
    width: 18px;
    background-repeat: no-repeat;
    background-position: 50% 50%;
}

jQuery 代码:

$(document).ready(function(){
    lang_flags_append();

    function lang_flags_append() {
        var $l = $( "ul#menu-top > li:last-child > a" ).text();
        console.log($l);
        $( "ul#menu-top li:last-child > a" ).css("background", "");
        if ( $l = 'EN' ) {
            $( "ul#menu-top > li:last-child > a" ).css("background-image", "url('https://www.example.nl/wp-content/themes/GH/images/flagUK.gif')");
        } else if ($l = 'NL') {
            $( "ul#menu-top > li:last-child > a" ).css("background-image", "url('https://www.example.nl/wp-content/themes/GH/images/flagNL.gif')");
        }
    }
});

【问题讨论】:

  • if ( $l === 'NL' ):你是在分配,而不是比较。这就是为什么总是执行第一个分支
  • 一个锚元素不能包含另一个锚元素,您的选择器或 HTML 标记有问题。其余的,如我所见,请参阅@TrueBlueAussie 的 asnwser
  • 添加了更新以涵盖我认为您想要的内容。请提供此类示例的 HTML 以避免混淆。您当前的代码被硬连接为仅处理第一个链接(从外观上看)。

标签: javascript jquery css


【解决方案1】:

Anchors 元素没有要返回的val()。

使用text() 或data- 属性

另外(正如@Fabrizio Calderan 提到的)您正在使用分配= 而不是比较== 或===

例如

if ( $l == 'NL' )

也称为@A。 Wolff 指出,你的选择器也坏了(它在锚中寻找锚):

例如,这足以找到锚点:

$( "ul#menu-top li:last-child > a" )

最好的办法是使用包含国家代码的数据属性。然后您可以使用它们来选择图像。

$(document).ready(function(){

    var lang = $( "ul#menu-top li:last-child > a" ).data('lang');

    $( "ul#menu-top > li:last-child > a" ).css("background-image", "url('https://www.example.nl/wp-content/themes/GH/images/flag" + lang + ".gif')");
});

你的主播会有

<a href="blahblah" data-lang="NL">My anchor</a>

更新:

重读后,我发现您显然想对所有您的标志链接进行此操作。

在这种情况下使用each() 来迭代它们:

例如

$(function(){
    $( "ul#menu-top li > a" ).each(function(){
        var lang = $(this).data('lang');
        $(this).css("background-image", "url('https://www.example.nl/wp-content/themes/GH/images/flag" + lang + ".gif')");
   });
});

注意:$(function(){ 只是$(document).ready(function(){ 的便捷快捷方式

【讨论】:

  • 请解释否决票。不要只是打了就跑! :)
  • $( "ul#menu-top li:last-child &gt; a" ).find("a") 看起来也不对 ;)
  • @A.Wolff:谢谢。也添加了这一点以及替代建议。这么多错误...这么少的时间:)
  • 我使用了 text() 函数,它返回正确的值。我还删除了 .find("a") 因为我已经选择了 标记。但是,条件语句在所有情况下仍然返回第一个值。我已经更新了上面的代码。
  • 请 a) 按照我的建议用数据属性替换代码 b) 提供您的 HTML,因为我们看不出您为什么只选择 last-child 链接 :)
猜你喜欢
  • 2014-04-24
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2012-12-31
相关资源
最近更新 更多