2013-05-08 45 views
-3

我在我的網站中集成了一個網絡軟件,我想刪除顯示的令人討厭的ALT標題標籤。問題是我無法訪問html,因爲該軟件位於遠程服務器上。我能做的唯一事情就是使用外部CSS或Javascript,因爲這些文件位於我自己的主機上,並且可以與遠程軟件進行交互。當無法訪問html時刪除ALT標題標籤

的代碼是:

<td class="available" title="Click here please" onclick="window.top.location.href='http://www.site.com'"></td> 

我做一些搜索/測試,但它似乎是不可能的使用CSS隱藏標題。我見過一個javascript解決方案在這裏:

Turn Off Alt Tags On Links With CSS?

但這並不爲我的工作情況。使用Jquery也不適合我。

有什麼建議嗎?

+3

有與做這樣的事情有關的潛在可訪問性問題。 – 2013-05-08 21:37:31

+3

'[title]'屬性*與* [alt]'屬性不相同。請不要交替使用它們。 – zzzzBov 2013-05-08 21:39:58

+1

這是iframe中的「軟件」嗎? – 2013-05-08 21:43:26

回答

0

這裏是一個可能的解決方案,使用document.createTreeWalker,從所選元素移除屬性和所有這些都是子元素。

HTML

<div id="removeHere" title="titled 0"> 
    <div title="titled 1">some text 1</div> 
    <div title="titled 2">some text 2 
     <div title="titled 3">some text 3 
      <div title="titled 4">some text 4</div> 
     </div> 
    </div> 
    <div title="titled 5">some text 5</div> 
</div> 
<div title="titled 6">some text 6</div> 

的Javascript

(function (global) { 
    function removeAttributeWalker(node, attribute) { 
     var treeWalker = document.createTreeWalker(
     node, 
     NodeFilter.SHOW_ELEMENT, { 
      acceptNode: function() { 
       return NodeFilter.FILTER_ACCEPT; 
      } 
     }, 
     false); 

     node.removeAttribute(attribute); 

     while (treeWalker.nextNode()) { 
      treeWalker.currentNode.removeAttribute(attribute); 
     } 
    } 

    global.addEventListener("load", function onLoad() { 
     global.removeEventListener("load", onLoad); 
     removeAttributeWalker(document.getElementById("removeHere"), "title"); 
    }, false); 
}(window)); 

jsfiddle

更新:如果你需要支持不具備上述方法舊的瀏覽器,那麼下面可以用來代替。

的Javascript

(function (global) { 
    function removeAttributeWalker(node, attribute) { 
     if (node.nodeType === 1) { 
      node.removeAttribute(attribute); 
      node = node.firstChild; 
      while (node) { 
       removeAttributeWalker(node, attribute); 
       node = node.nextSibling; 
      } 
     } 
    } 

    global.addEventListener("load", function onLoad() { 
     global.removeEventListener("load", onLoad); 
     removeAttributeWalker(document.getElementById("removeHere"), "title"); 
    }, false); 
}(window)); 

jsfiddle

+0

感謝您的建議,但這不適用於我的情況。似乎我真的對如何使用JS能夠與遠程軟件進行交互有點限制。但是我看到document.createTreeWalker與IE8不兼容。所以即使這個解決方案有效,與IE8的不兼容也是不可接受的。 – dotcom22 2013-05-08 23:36:26

+0

你應該真的考慮指定你想在你的問題中支持哪些瀏覽器,我們無法猜測。 – Xotic750 2013-05-08 23:49:55

+0

我接受你的更新答案,因爲你使證明是支持IE8的工作解決方案。然而,這不適合我的情況,但不是你的錯。正如我所說,允許我使用JS的方法有點不合常規,因爲我試圖與未在我身邊託管的代碼進行交互。這個問題也可能是與其他JS的衝突。謝謝。 – dotcom22 2013-05-11 13:04:09

2

適應你所指出的代碼,使它看起來在td元素,而不是a,應該工作:

var elements = document.getElementsByTagName('td'); 
for (var i = 0, len = elements.length; i < len; i++) 
{ 
    elements[i].removeAttribute('title'); 
} 
+0

是的,我已經嘗試過,但沒有成功。也許是由於外部JS不適用於這種情況。 – dotcom22 2013-05-08 21:42:32

+1

你的消息是混淆的,你說你可以使用JavaScript,但現在你不能?你能更具體地說明你把代碼放在哪裏嗎? – RST 2013-05-08 21:44:44

+0

是的,我可以和我嘗試使用上面的代碼,但這不起作用。我用一些其他的JS代碼沒有問題。上面的代碼可能不適合我的情況。更確切地說,JS不是外部的,只有CSS纔是.. JS必須在我用於集成軟件的代碼片段之後立即應用。也許這是爲什麼這不起作用.. – dotcom22 2013-05-08 21:55:25