Я хочу написать небольшой скрипт для инвертирования черно-белых цветов на определенной области страницы. Я использовал инвертирующий скрипт, который нашел в другом потоке, и настроил его только для инвертирования черно-белого и только на определенной области страницы: http://jsfiddle.net/yQe9t/87/Javascript не совместим с jQuery v1.11 или ниже
Это отлично работает на jQuery 1.12.1 и выше, но Ive заметил, что некоторые страниц, в которых Im работает с ними, все еще используют jQuery 1.9, и по какой-то причине скрипт работает неправильно; http://jsfiddle.net/yQe9t/88/ (jquery 1.9 здесь). Я не могу изменить версию jQuery, используемую на этих страницах, поэтому мне нужно сделать ее совместимой с этим.
Может кто-нибудь, пожалуйста, помогите мне выяснить, как заставить мой код работать и с более старыми версиями? Я бы хотел, чтобы он работал над новым и старым, но не знаю достаточно о Javascript, чтобы исправить это.
Мой полный Javascript:
$(".invertAll").click (function() {
var Body = $(".unit.size-col-d.width610");
invertElementColors ($(Body));
});
function rgb2hex(rgb){
rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
return (rgb && rgb.length === 4) ? "#" +
("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[3],10).toString(16)).slice(-2) : '';
}
function invertElementColors (jNode)
{
jNode.children().each(function() {
invertElementColors ($(this));
});
jNode.css ({
'color' : function (J, oldColor) {
return invertRGB_ColorStr (oldColor);
},
'background-color' : function (J, oldColor) {
return invertRGB_ColorStr (oldColor);
}
});
}
function invertRGB_ColorStr (oldColorStr)
{
// convert color rgb to hex code so we can easily detect colors
var help = oldColorStr;
var colorHex = rgb2hex(help);
// only convert black and white
if ((colorHex == '#000000') || (colorHex == '#ffffff')) {
//--- Special case
if (oldColorStr == 'transparent') oldColorStr = 'rgb(255, 255, 255)';
//--- Color is text in RGB format. EG: rgb(1, 22, 255)
var colorArray = oldColorStr.match (/\((\d+),\s?(\d+),\s?(\d+)\)/);
var newColorStr = $.map (colorArray, function (byte, J)
{
if (!J) return null;
//--- Invert a decimal byte.
return Math.abs (255 - parseInt (byte));
}
).join (',');
return 'rgb(' + newColorStr + ')';
} else {
return oldColorStr;
}
}
Я хотел бы предложить глядя через различные API вызовы JQuery, искать их в документы и увидеть, какую версию они были введены в. – ste2425
я заметил, что помещение предупреждение в jNode .children(). Каждая функция возвращает несколько предупреждений на 1.12.1 (рекурсивный вызов), но только один из jQuery 1.9. Функции .children и .each представлены в версии 1.0, так может быть, это что-то связано с рекурсией? – Piet
Вы не можете сопоставить пустой массив 'var colorArray = oldColorStr.match (/ \ ((\ d +), \ s? (\ D +), \ s? (\ D +) \) /); console.log ("!", ColorArray) ' – mplungjan