使用jQuery的attr()编写if语句

时间:2018-07-24 14:02:45

标签: javascript jquery

我是jQuery的初学者,所以这段代码正确吗?还有在页面加载时如何称呼它?

我要说的是如果皮肤"white",请将网站徽标更改为黑色徽标。

if ($("#themestyle").attr('href', "/web/assets/css/skins/white.css")) {
  $("#logo").attr('src', "/web/assets/images/LogoBlack.png");
} else {
  $("#logo").attr('src', "/web/assets/images/Logowhite.png");
}
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta charset="utf-8">

  <link rel="icon" href="/web/assets/images/favicon.ico">
  <title>
    <asp:Literal runat="server" Text="Test Website" />
  </title>
  <link rel="stylesheet" href="/web/assets/css/skins/blue.css" id="themestyle" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>

<body>
  <div class="navbar-brand">
    <img src="/web/assets/images/Logowhite.png" id="logo" />
  </div>
</body>

1 个答案:

答案 0 :(得分:9)

问题是因为您正在attr()中使用if()设置。这将设置href属性,然后返回一个包含link元素的jQuery对象。强制为布尔值时,它将始终返回true

要解决此问题,请使用attr() getter 并使用==将其与已知的href进行比较,如下所示:

var filename = 'LogoBlack.png';
if ($("#themestyle").attr('href') == "/web/assets/css/skins/white.css") {
  filename = 'Logowhite.png';
}
$("#logo").attr('src', '/web/assets/images/' + filename);

或者,您可以使用三元表达式。它们更简洁,但可以说更难阅读:

var filename = $("#themestyle").attr('href') == "/web/assets/css/skins/white.css" ? 'LogoBlack.png' : 'Logowhite.png';
$("#logo").attr('src', '/web/assets/images/' + filename);