【问题标题】:Inverting Meta attributes on jQuery反转 jQuery 上的 Meta 属性
【发布时间】:2013-02-20 20:40:08
【问题描述】:

我正在尝试使用 jQuery 函数反转元属性(内容和名称),但前提是元内容以“some”开头

<meta name="abc" content="something"/>
<meta name="def" content="somewhere" />

我试过这个功能:

<script>
$('meta').ready(function(){
var a_metaname = $(this).attr("name");
var a_metacontent = $(this).attr("content");

if(a_metacontent^="some") {
$('head').append("<meta name="+ a_metacontent +" content="+ a_metaname +" />");

}
 });
</script>

但它不会反转每个元数据的情侣名称/内容。

如何改进功能?谢谢 !

【问题讨论】:

  • @undefined 不是按位异或并赋值吗?
  • @JanDvorak 是的,我忘记了 JavaScript 支持这一点。

标签: jquery attributes meta


【解决方案1】:
$('meta').ready(function(){

在这里您可能会混淆两件事:$('meta').each(...) 将遍历所有元标记。 $(document).ready(...) 等待就绪事件。 $('meta').ready(...) 可能不会按照你的想法去做。

由于stript 标签位于meta 标签之后,因此您无需等待ready 事件。不确定您是否可以在初始加载后修改元标记(据我所知,它们中的大多数会更快生效)。因此,我建议不要等待。

$('meta').each(function(){

if(a_metacontent^="some") {

与 CSS 不同,^= 在 Javascript 中并不意味着“以”开头。相反,^= 执行按位异或(在将两个操作数都转换为整数之后)并将结果分配回去。您可以将indexOf 用于“开始于”功能,也可以使用正则表达式。

if(/^some/.test(a_metacontent)){

$('head').append("<meta name="+ a_metacontent +" content="+ a_metaname +" />");

您将原始元标记保留在文档中,并添加新的元标记。也许你应该删除它。或者,不是为浏览器创建 HTML 来解析,而是操作现有节点。解析 HTML 很慢。

$(this).attr("content", a_metaname).attr("name", a_metacontent)

还要注意

$('meta').each(function(){
    if(/^some/.test($(this).attr("content"))) {
        ...
    }
}

可以替换为

$('meta[content^="some"]').each(function(){
    ...
})

【讨论】:

  • 这很有道理,非常感谢 Jan Dvorak 和 @user546305
【解决方案2】:

替换这个

if (a_metacontent.match(new RegExp('some[a-z0-9A-Z]+$'))){
    $('head').append("<meta name="+ a_metacontent +" content="+ a_metaname +" />");
}

【讨论】:

  • 顺便问一下,我能知道你做这样的事情想要达到什么目的吗?
  • 嗯,这有点复杂,但基本上代码在几个星期内都不可编辑,我别无选择使用 jQuery 来节省我的项目时间! :)
猜你喜欢
  • 2021-01-16
  • 1970-01-01
  • 2023-03-10
  • 2012-07-20
  • 2016-05-16
  • 2012-11-07
  • 2011-03-12
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多