0

このプロジェクトのjsfiddleがあります。フィドルが「onLoad」に設定されている場合、必要に応じて要素が削除されます。ただし、ドロップダウンを「ラップなし-で」に切り替えると、機能しません。ウィキペディアで使用しているので、「ラップなし」で動作する必要があります。これが、スクリプトのロード方法です。私のコードは次のとおりです。

$('span.mw-usertoollinks a:last').remove();
$('span.mw-usertoollinks').each(function() {
    this.innerHTML = this.innerHTML.replace(" | )", ")");
});

ブロックリンクとその前のブロックを以下から削除することを想定しています|

<span class="mw-usertoollinks">
    (
    <a href="/UT:T13" class="mw-redirect" title="UT:T13">Talk</a>
     | 
    <a href="/S:Contributions/T13" title="S:Contributions/T13">contributions</a>
     | 
    <a href="/S:Block/T13" title="S:Block/T13">block</a>
    )
</span>

注:コードボックスにうまく収まるように、User_talk:をUT:に、Special:をS:に省略しました。他のすべてはオリジナルです。

4

1 に答える 1

2

onloadコードの実行時に選択しようとしているDOM要素が存在しないため、外部では機能しません。幸いなことに、jQueryで次のようにコードをラップすることができます。

$(function() {
    // your code here
});

また、DOMがロードされたにのみ実行されます。

これがフィドルです

$(function(){...});これはの省略形であることに注意してください$(document).ready(function(){...});。あなたがしているのは、document.readyイベントが発生したとき(つまり、DOMが完全にロードされた後)にのみ実行されるコードを添付することです。

アップデート

技術的には、これは別の質問ですが、これはあなたのために働くはずです:

$(function() {
    $('span.mw-usertoollinks').each(function () {
        var $elem = $(this);
        $elem.children('a:last').replaceWith("-");
        $elem.html($elem.html().replace(" | -", ""));
    });
 });

$.eachを使用する場合、jQueryセレクターを使用する場合でも、jQueryオブジェクトではなくDOMノードのコレクションを反復処理していることに注意してください。したがって、 jQuery関数を使用するには、次thisのようなjQueryオブジェクトに変換する必要があります。$(this)結果のjQueryオブジェクトを$elem再作成し続ける必要をなくすために、キャッシュしています。

最後のリンクのみを選択childrenするセレクターで子ノードを選択するために使用します。次に、を使用してのコンテンツを操作し、末尾の文字を削除します。a:lasta.html()$elem

于 2013-03-21T18:24:24.237 に答える