【问题标题】:this:after selector jQuery这:在选择器 jQuery 之后
【发布时间】:2013-08-12 06:42:09
【问题描述】:
$('.email').each(function(l,i){
    var that = $(this);
    var thatOtherOne = $(this:after);
    $('<a>').attr('href', 'mailto: '+ that.html + thatOtherOne.css('content')).insertAfter(that);
    that.hide();
});
.email:after {
    content: "@mydomain.com";
}
<span class="email">info</span>

你好 Stackoverflow!

这是我对付垃圾邮件的方法。使用 CSS :after 选择器和 content 我尝试在 &lt;span&gt; 中填写我的自定义电子邮件,然后 css 添加 url。但这并不能使其可点击,所以这就是我使用 JS/jQuery 尝试上述方法的原因。

很遗憾,这不起作用,因为$(this:after); 不是有效的选择器。我该如何更改?

【问题讨论】:

  • 我不确定你想用this:after 完成什么。您能否详细说明或提供一些示例?
  • thatOtherOne = that.next()
  • @Dave 如果他试图操纵他的 ":after" 东西的 "content" 属性,则不要这样做。
  • 哦,对了。是的,我不知道 JavaScript 是否可以做到这一点。只需更改实际内容即可。
  • 不是特别相关,但我建议选择比 thatthatOtherOne 更好、更具体的变量名称...

标签: javascript jquery selector mailto


【解决方案1】:

您根本无法构建这样的选择器;它真的没有语法意义。选择器用于在 DOM 中进行搜索。要做你想做的事,你可以尝试在你的“内容”中使用attr()技巧:

.email:after {
  content: attr(data-domain);
}

然后在您的标记中:

  <a class=email data-domain='@whatever.com'>info</a>

然后你的 JavaScript 就可以这样做了:

$('.email').each(function(l,i){
    var that = $(this);
    var domain = that.data('domain');
    $('<a>').prop('href', 'mailto: ' + that.text() + domain).insertAfter(that);
    that.hide();
});

这个想法是把你的代码真正需要使用的东西保存在一个单独的属性中,然后在 CSS 规则中使用attr() 运算符(或任何你想调用的)来获取该属性值并将其用作内容。如果您愿意,可以将运算符与字符串组合。克里斯·科伊尔has a good blog post about it.

【讨论】:

  • +1 用于解释、代码示例,并让我知道 :before 和 :after 不是 DOM 的一部分。
  • 请注意,在data-domain 中添加@ 是某些机器人可能会索引的东西,这使得在javascript 代码中添加@ 更加智能。示例:'mailto: ' + that.text() + '@' + domain -- 另请注意,它不会向链接添加任何文本,从而使它们无敌。将.html([your text/code]) 添加到元素中。
  • 大声笑,你可以用 css 做这样的事情真是太有趣了
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
相关资源
最近更新 更多