2013-05-08 44 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