2014-02-15 5 views
0

Как вы уже знаете, ссылки уменьшают читаемость в онлайн-тексте. Это особенно заметно в таких статьях, как статьи в науке о Википедии, где каждый другой термин викилизуется и, следовательно, ярко-синим. Я пытаюсь создать аддон Firefox с кнопкой переключения, что делает ссылки нормальными.Как изменить стиль CSS с помощью Javascript, чтобы ссылки были идентичны нормальному тексту?

Кажется разумным, что был бы один слой с поддержкой Javascript, который изменяет CSS-стиль ссылок в тексте тела в соответствии с тем, что лежит в основе основного текстового стиля. Правильно ли я в этом предположении? Если так, то, что это? Если нет, то какой самый простой способ сделать это?

+0

Как бы вы это сделали с помощью CSS? – Xotic750

+0

@ Xotic750: это примерно эквивалентный вопрос, так как вы можете редактировать атрибуты CSS с помощью Javascript. – Mike

+0

Хорошо, позвольте мне перефразировать это для вас. Если у вас был доступ к правилам CSS (т. Е. Файл page.css сайта), как бы вы написали правило CSS, чтобы «якорь выглядел как обычный текст? Как только вы это знаете, достаточно просто получить доступ к этим правилам через ['cssRules API'] (https://developer.mozilla.org/en-US/docs/Web/API/CSSRule) и изменить его. – Xotic750

ответ

1

Вы должны быть в состоянии сделать это несколькими способами. Хотя я не собираюсь делать эту линию. Я бы, наверное, начал с getElementByTagName, если бы я не хотел загружать или предполагать предварительную загрузку jQuery.

var anchors = document.getElementsByTagName('a'); 
anchors = Array.prototype.slice.call(anchors); 
anchors.forEach(function (anchor) { 
    anchor.style.textDecoration = 'none'; 
    anchor.style.color = 'black'; // to taste 
    // et. al. You'll need to define these CSS rules. 
}); 

Вы, возможно, потребуется сделать некоторые проверки, чтобы убедиться, что они на самом деле в тексте вашей статьи, а не якорей из навигационного меню, боковой панели или колонтитула.

Если вы действительно можете использовать один вкладыш, это может быть что-то вроде:

Array.prototype.forEach.call(document.getElementsByTagName('a'), function (anchor) {/* CSS */}); 
+1

['getElementByTagName'] (https: //developer.mozilla.org/en-US/docs/Web/API/Element.getElementsByTagName) возвращает 'HTMLCollection' или' nodeList' не 'массив' – Xotic750

+0

Хороший звонок! Исправленный. –

+0

Нет проблем. Вы также можете использовать Array.prototype.forEach.call (anchors, function ... ', а не' slice' them.;) – Xotic750

0

If ванильным JS:

var links = document.getElementsByTagName('a'); 
for(var i=0;i<links.length;i++){ 
    links[i].style.appearance = 'none'; 
} 

PS Я не тестировал редактирование этого кода.

3

Применяя следующие стили должны сделать:

a { 
    color: inherit !important; 
    text-decoration: inherit !important; 
} 

Вы можете применить эти стили для всех веб-страниц using nsIStyleSheetService. Если вы хотите применить их только к одной веб-странице, вы должны ввести вместо нее тег <style>.

+0

hey wlad Мне было интересно, мой стиль не работал с его проблемой с линией документа: @ -moz-document domain (wikipedia) {a {color: black! Important;}} – Noitidart

+1

@Noit: это должен быть домен (domain) wikipedia.org) 'конечно. –

+0

ах да, ты прав! :) спасибо!! – Noitidart

0

использовать nsIStyleSheetSercie, как и рекомендовал wlad сделать это. просто запустите это при запуске, убедитесь, что CssUri является глобальной переменной, то при выключении запуска функции UNREGISTER

var sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService); 
var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService); 
var css = 'a {color: inherit !important; text-decoration: none !important; }'; 
//var cssEnc = 'data:text/css;base64,' + window.btoa(css); 
var cssEnc = encodeURIComponent(css); 
var cssUri = makeURI('data:text/css,' + cssEnc); 
sss.loadAndRegisterSheet(cssUri, sss.USER_SHEET); 
//when want to unregister run this: 
//sss.unregisterSheet(cssUri, sss.USER_SHEET); 

это будет применять таблицы стилей для всех сайтов. я спросил wlad в комментарии ниже, как сделать это сайт speicif, используя @document

+0

используйте этот обновленный css в приведенном выше коде, который я дал u, в приведенном выше примере подчеркивание все еще происходит, и оно не ограничивалось сайтом wikipedia, поэтому оно повлияло бы на весь домен '' 'var css = '@ -moz-document (wikipedia.org) {a, strong {color: inherit! important; text-decoration: none! important; }} '; '' ' – Noitidart