将“target ='_ blank'”添加到不包含给定id的锚标记中

时间:2017-08-17 00:33:06

标签: javascript jquery

如何将target=_blank属性添加到锚标记,但按钮和某个div除外。如何使用#?

不将目标属性添加到“call-control”类和ID

我试过这个:

$('a:not(.call-control,"#")').attr('target', '_blank').addClass('checkMate');

/* then later... */
$('.checkMate').attr("target", "");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="call-control">
  <span id="incomingCallBrand"></span>
</div>
<div>
  <a href="#" class="comms-icon" id="iambusy"></a>
  <span>Peter</span>
</div>

2 个答案:

答案 0 :(得分:1)

如果我理解正确,你想选择一个既没有类&#34; call-control&#34;使用jQuery's .not()方法也不能将href设置为&#34;#&#34;

要选择未将href设置为&#34;#&#34;的元素,我建议jQuery's "Attribute Equals" Selector

.not([href=#])

添加课程要求:

.not([href=#],.call-control)

我还建议使用removeAttr(),而不是将target设置为空字符串。

以下是一个例子:

&#13;
&#13;
$('a:not([href=#],.call-control)').attr('target', '_blank').addClass('checkMate');

/* remove the attribute after one second */
setTimeout(function(){
    $('.checkMate').removeAttr('target');
},1000);
&#13;
a {
  display: block;
}

.checkMate {
  background-color:pink;
}

/* to demonstrate when the target has been removed */
a[target=_blank] {
  background-color:lightgreen;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a href="#" class="call-control">Class and HREF</a>
<a href="page.html" class="call-control">Just Class</a>
<a href="#">Just HREF</a>
<a href="http://example.com">Neither Class nor HREF</a>
&#13;
&#13;
&#13;

供参考:
Add a class to a href that's set to '#'

答案 1 :(得分:0)

无论您尝试选择哪种特定链接,您的选择器都无效。

要将选择应用于任何没有某个的链接,您正在寻找$("a:not('.class')")

要将选择应用于任何没有某个的链接,您正在寻找$("a:not('[href=#'])")

这些可以合并为$("a:not('.class-control, [href=#]')")

$("a:not('.call-control, [href=#]')").attr("target", "_blank").addClass('checkMate');
.checkMate {
  color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a class="call-control" href="#" rel="noopener noreferrer">Same Page (doesn't get the target)</a>
<br />
<a class="call-control" href="http://www.google.com" rel="noopener noreferrer">Google (doesn't get the target)</a>
<br />
<a href="http://www.facebook.com" rel="noopener noreferrer">Facebook (gets the target)</a>

另外,请务必注意target=_blank具有重要的 security vulnerability ,可以与window.opener()一起使用。这可以是 seen here 。要解决此问题,您还需要在链接中添加rel="noopener noreferrer"(如上所述)。

希望这有帮助! :)