3

ターゲットページにこのHTMLを指定すると、次のようになります。

<dd class="ddTit">
<a href="http://abc.xxx.com/54781.html" target="_blank">special text words</a>
</dd>

「特別なテキストの単語」に基づいてURLを取得し、Greasemonkeyスクリプトでクリックするにはどうすればよいですか?

私はこれを試しました:

var textlink = document.querySelector ("dd.ddTit a[textContent*='special']");
var clickEvent      = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
textlink.dispatchEvent (clickEvent);

運がない。

特別な単語が含まれているtextContentなど、に基づいて選択するにはどうすればよいですか?textContent

4

3 に答える 3

3

残念ながら、 CSS セレクターは (まだ) コンテンツ/テキスト セレクターを提供していないquerySelector()ため、これを行うことはできません。

3つのアプローチがあります:

  1. ノードのターゲット選択をループします。

    var ddTitLinks  = document.querySelectorAll ("dd.ddTit a");
    
    for (var J = ddTitLinks.length - 1;  J >= 0;  --J) {
        var ddTitLink   = ddTitLinks[J];
        //--- Case-insensitive search.
        if (/special text words/i.test (ddTitLink.textContent) ) {
            var clickEvent      = document.createEvent ('MouseEvents');
            clickEvent.initEvent ('click', true, true);
            ddTitLink.dispatchEvent (clickEvent);
            break;
        }
    }
    


  2. jQueryを使用します(多くの手間を省く強力なライブラリ):

    // ==UserScript==
    // @name     _Click Special link(s)
    // @include  http://YOUR_SERVER.COM/YOUR_PATH/*
    // @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
    // ==/UserScript==
    
    //--- Note that contains() is CASE SENSITIVE.
    var specLink    = $("dd.ddTit a:contains('special text words')");
    if (specLink.length) {
        var clickEvent  = document.createEvent ('MouseEvents');
        clickEvent.initEvent ('click', true, true);
        specLink[0].dispatchEvent (clickEvent);
    }
    


  3. XPath を使用します。

    //--- Note that contains() is CASE SENSITIVE.
    var specLinks   = document.evaluate (
        "//dd[contains(@class, 'ddTit')]/a[contains(text(), 'special text words')]",
        document,
        null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );
    
    if (specLinks.snapshotLength) {
        var specLink    = specLinks.snapshotItem (0);
        var clickEvent  = document.createEvent ('MouseEvents');
        clickEvent.initEvent ('click', true, true);
        specLink.dispatchEvent (clickEvent);
    }
    
于 2012-09-12T00:29:51.710 に答える
1

これは、必要なことを実行する jquery を使用したグリースモンキー スクリプトです。

// ==UserScript==
// @name       your script
// @namespace  http://foobarfoobar.com/
// @version    0.1
// @description  Trigger click with jquery
// @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// @match      http://*/*
// ==/UserScript==

(function () {
    $(document).ready(function(){
        $('dd.ddTit').find("a:contains('special text words')").bind('click', function() {
            window.location.href = this.href;
            return false;
        }).trigger('click');

    });
})();

このコードの一部をスクリプトにコピーする場合は、必ず次の行を含めてください。

// @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

jquery コードがうまく機能するように、スクリプトを適用する特定のサイトに @match ルールを調整します。

于 2012-09-11T18:53:26.560 に答える
0

リンクを識別するためのコンテンツしかない場合は、必要なリンクを見つけるためにすべてのリンクをループする必要がある場合があります。

var links = document.getElementsByTagName( 'a' );

for ( var i = 0; i < links.length; i++ ) {
    var link = links[i];
    if ( /special/.test( link.textContent ) ) {
        // do something with link
    }
}
于 2012-09-11T18:15:54.233 に答える