2016-11-07 8 views
1

内部ネットワーク上にJiraページを作成する必要があります。外部コードを使用しないでusercriptを使用してredcolorで代理人の名前を表示します。jQueryなどは使用しないでください。私はちょうど学んでいます。 例のページには、(リストビュー)はこちら:https://jira.atlassian.com/issues/?filter=-5Userscript getElementsByTagNameがJiraのすべてのリンクを返さない

私の内部ページは、このように、それに私の名前のタグを次のようしています

<a class="user-hover" rel="myusername" id="assignee_myusername" href="https://jira.mydomain.org/secure/ViewProfile.jspa?name=myusername" target="_parent">Myfirstname Mylastname</a> 

マイuserscriptが唯一のトップとボトムラインに色の変更を行っていますページ(私はログインしています;ユーザー固有のもののためのほとんどのリンクを変更します)。しかし、症例や譲受人のリストが掲載されている中間は影響を受けません。ここにスクリプトがあります:

// ==UserScript== 
// @name   Jira 
// @namespace  https://jira.mydomain.org/secure/Dashboard.jspa 
// @include  https://jira.mydomain.org/* 
// ==/UserScript== 
var links = document.getElementsByTagName('a'); 
var element; 
    for (var i = 0; i < links.length; i++) { 
    element = links[ i ]; 
    if (element.id = "assignee_myusername") { 
     element.style.color = "red"; 
     element.style.backgroundColor = "black"; 
    } 
} 

譲受人の列に自分の名前をハイライト表示させるにはどうすればいいですか?

P.S.これはAjaxの質問と同じではありません。外部コードを使用しています。外部コードは使用しません。外部コードはありません。

+0

これは、コンテンツの一部があることが考えられXHRを介してロードされ、スクリプトは複数回呼び出される必要があります。あなたはどのようにあなたのスクリプトを実行していますか? –

+0

私は特にそれを実行していない、Ninjakitは - スクリプト全体が私のポストにあります。私はそれがページがロードされた後に実行されると思う。 – uldics

+0

[AJAXリクエストのFire Greasemonkeyスクリプト]の複製があります。(http://stackoverflow.com/questions/8281441/fire-greasemonkey-script-on-ajax-request) –

答えて

0

私の推測では、スクリプトを作成したいJiraページの部分が、ユーザースクリプトの実行時にロードされていないと思います。 JiraはAjaxを使用してページの一部を非同期にロードします。コードの周りにsetTimeoutを追加してみてください。

window.setTimeout(function() { 
    var links = document.getElementsByTagName('a'); 
    var element; 
    for (var i = 0; i < links.length; i++) { 
     element = links[ i ]; 
     if (element.id = "assignee_myusername") { 
      element.style.color = "red"; 
      element.style.backgroundColor = "black"; 
     } 
    } 
}, 1000); 

これで、1秒後にリンクが強調表示されます。それはハックな解決策ですが、動作すれば、少なくとも、非同期ロードは実際問題であることがわかります。

あなただけのID「assignee_myusername」を持つ要素のスタイルを変更したい場合は、getElementsByTagNameを使用する必要はありません、あなたはgetElementByIdを使用することができます。

window.setTimeout(function() { 
    var element = document.getElementById('assignee_myusername'); 
    element.style.color = "red"; 
    element.style.backgroundColor = "black"; 
}, 1000); 
+0

タイムアウト機能を追加するだけで、ページのすべてのリンクが色付きになります。しかし、追加の基準を設定するとすぐに、 && element.rel = "myusername" 何も強調表示されません。 getElementByIdは1つの要素だけを行い、getElementsByIdは再び何もしません。 – uldics

+0

私の初心者の間違いを許してください!比較は==、=ではない。報告されたケースが複数ある記者のパブリックページ(ログインしていない)で試してみたところ、彼の名前とのリンクはすべて奇妙だった。そして、それは私の顔の拳のようになった - "=="、今それは魅​​力のように動作します。 – uldics

+0

そう、私はそれを見落とした。それが価値あるものであれば、常に===、==を使うべきではありません。すべての実用的な目的のために、二重等号は推奨されていません。 –

関連する問題