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
$('meta').ready(function(){

ここで、おそらく 2 つのことを混乱させているでしょう:$('meta').each(...)すべてのメタ タグを反復処理します。$(document).ready(...)ready イベントを待ちます。$('meta').ready(...)おそらくあなたが思うようにはなりません。

striptタグはタグの後に配置されるので、イベントmetaを待つ必要はありません。初期ロード後にメタ タグを変更できるreadyかどうかはわかりません(私の知る限り、ほとんどのメタ タグはすぐに反映されます)。したがって、私は待たないことをお勧めします。

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

if(a_metacontent^="some") {

CSS とは異なり、^=Javascript では「で始まる」という意味ではありません。代わりに、^=(両方のオペランドを整数に変換した後) ビットごとの XOR を実行し、結果を代入します。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 に答える
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 に答える