Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   исключение из выборки атрибутов (https://javascript.ru/forum/jquery/63943-isklyuchenie-iz-vyborki-atributov.html)

capau 10.07.2016 11:10

исключение из выборки атрибутов
 
имею вот такой скрипт для расстановки переносов

$(document).ready(function() {

	$.fn.hyphenate = function() {
		var all = "[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]",
			glas = "[аеёиоуыэю\я]",
			sogl = "[бвгджзклмнпрстфхцчшщ]",
			zn = "[йъь]",
			shy = "\xAD",
			re = [];

		re[1] = new RegExp("("+zn+")("+all+all+")","ig");
		re[2] = new RegExp("("+glas+")("+glas+all+")","ig");
		re[3] = new RegExp("("+glas+sogl+")("+sogl+glas+")","ig");
		re[4] = new RegExp("("+sogl+glas+")("+sogl+glas+")","ig");
		re[5] = new RegExp("("+glas+sogl+")("+sogl+sogl+glas+")","ig");
		re[6] = new RegExp("("+glas+sogl+sogl+")("+sogl+sogl+glas+")","ig");
		return this.each(function() {
			var text = $(this).html();
			for (var i = 1; i < 7; ++i) {
				text = text.replace(re[i], "$1"+shy+"$2");
			}
			$(this).html(text);
		});
	};

	$(function(){
		$('p, h1, h2, h3, h4, h5, h6, a').hyphenate();
	});
});

всё бы хорошо, но он вставляет переносы даже в атрибуты картинок которые вложены в тэг <a>
как исключить из выборки атрибуты ссылок/картинок?

dd_smol 11.07.2016 21:50

Тут два пути решения которые мне лично приходят на ум.
  1. Каждый элемент обрабатывать по отдельности.
  2. Или же изменить регулярное выражения.

рони 11.07.2016 22:44

Расстановка переносов в html тексте на русском языке
 
capau,
для данного варианта достаточно указать блок который нужно обработать
было
$('p, h1, h2, h3, h4, h5, h6, a').hyphenate();

можно сейчас
$("body").hyphenate();


$.fn.hyphenate = function() {
    var all = "[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]",
        glas = "[аеёиоуыэю\я]",
        sogl = "[бвгджзклмнпрстфхцчшщ]",
        zn = "[йъь]",
        shy = "\xAD",
        re = [
    new RegExp("(" + zn + ")(" + all + all + ")", "ig"),
    new RegExp("(" + glas + ")(" + glas + all + ")", "ig"),
    new RegExp("(" + glas + sogl + ")(" + sogl + glas + ")", "ig"),
    new RegExp("(" + sogl + glas + ")(" + sogl + glas + ")", "ig"),
    new RegExp("(" + glas + sogl + ")(" + sogl + sogl + glas + ")", "ig"),
    new RegExp("(" + glas + sogl + sogl + ")(" + sogl + sogl + glas + ")", "ig")
    ];
    return this.each(function() {
        $(this).contents().filter(function() {
            this.nodeType == 1 && $(this).hyphenate();
            return this.nodeType == 3;
        }).each(function(i, el) {
            re.forEach(function(reg) {
                el.data = el.data.replace(reg, "$1" + shy + "$2");
            })
        });
    });
};


Часовой пояс GMT +3, время: 19:21.