1

ID のない一連のリンクされた画像を含む Web ページを取得し、それらを太字のテキストに置き換える Greasemonkey スクリプトを作成しようとしています。

私がたどっていた道は、残念ながらいくつかの行き止まりにつながっています。

まず、何らかの理由で私が持っているコードは、画像を [CLICK] テキストに置き換え、すぐに親/置換を再度実行して [CLICK] を消去します。

第 2 に、createTextNode を太字にする良い方法はないのではないかという疑念がこっそりあります。

それで、誰かがそのループが私にとってうまくいかなかった理由を説明し、#2がこれを行う正しい方法を教えて、追加されたテキストを太字にすることができます.

var smiliesList = document.evaluate(
"//img[contains(@src,'smilies')]", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 

var prefixReplace = document.createTextNode('[CLICK]');
var prefixImgSrc = ('smilies/goofyimage.png')


for (var i=0;i<smiliesList.snapshotLength;i++) {

    var node = smiliesList.snapshotItem(i);

        if (node.src == prefixImgSrc) {

            node.parentNode.replaceChild(prefixReplace, node); 


    }}
4

2 に答える 2

1

I believe you need to create a new replacement text node for each image while you're in the loop. You're currently only creating a single node prior to the loop.

Also, to create bold text, just create a <b> element and then use innerHTML to put text inside.

var smiliesList = document.evaluate(
"//img[contains(@src,'smilies')]", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 

var len = smiliesList.snapshotLength;

for (var i=0; i<len; i++) {
  var node = smiliesList.snapshotItem(i),
      p;

    if (node.src.indexOf('smilies/goofyimage.png') > -1) {
      var textNode = document.createElement('b');
      textNode.innerHTML = '[CLICK]';    

      if (node.parentNode) {
        p = node.parentNode;
        p.removeChild(node);
        p.appendChild(textNode);              
      }      
  }
}

Also, I couldn't help but think there may be a better way of doing this. I'd recommend going with this version - fewer lines of code and more browser compatibility:

var imgs = document.getElementsByTagName('img');        
for (var i = imgs.length - 1; i >= 0; i--) {
    if (imgs[i].src.indexOf('smilies/goofyimage.png') > -1) {
      var textNode = document.createElement('b');
      textNode.innerHTML = '[CLICK]';    
      imgs[i].parentNode.replaceChild(textNode, imgs[i]);     
    }
} 
于 2013-04-07T15:07:56.930 に答える