1

我正在尝试使用 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>

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

我该如何改进功能?谢谢 !

4

2 回答 2

0

替换这个

if (a_metacontent.match(new RegExp('some[a-z0-9A-Z]+$'))){
    $('head').append("<meta name="+ a_metacontent +" content="+ a_metaname +" />");
}
于 2013-02-20T20:45:42.203 回答
0
$('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(){
    ...
})
于 2013-02-20T21:02:57.870 回答