JSFiddle - React, Tailwind, and code Playground

by podgorniy

HTML

<div class="text published visible">
<ul>
<li><a href="http://freetonik.com/blog/all/advertisers/">Про&nbsp;рекламщиков</a>. Сам я не&nbsp;люблю их.</li>
<li><a href="http://lenta.ru/articles/2013/04/26/anonymity/">Про&nbsp;tor</a> от&nbsp;разработчика.</li>
<li><a href="http://habrahabr.ru/post/178707/">Год без&nbsp;интернета</a>. Парень отказался от&nbsp;интернета, чтобы оценить влияние сети на&nbsp;себя.</li>
<li><a href="http://habrahabr.ru/post/178463/">Стартапер</a> о&nbsp;своей жизни без&nbsp;цензуры (истории неуспеха сохранены, что является редкостью в&nbsp;подобного рода статьях).</li>
<li>Экономические потрясения в&nbsp;<a href="http://habrahabr.ru/company/apps4all/blog/179161/">диабло</a> и&nbsp;<a href="http://habrahabr.ru/post/178721/">EVE Online</a>.</li>
</ul>
<p>Следующий подобный пост&nbsp;&mdash; как только наберется еще 5 ссылок.</p>
</div>

JavaScript

function delegate (handlerNode, eventName, handlerCondition, handler) {
	var hadlerWrapper;

	hadlerWrapper = function (event) {
		var target;

		event = event || window.event;
		target = event.target || event.srcElement;
		while (target !== handlerNode) {
			if (handlerCondition(target)) {
				handler.call(target, event);
			}
			target = target.parentNode;
		}
	};

	if (handlerNode.addEventListener) {
		handlerNode.addEventListener(eventName, hadlerWrapper, false);
	} else if (handlerNode.attachEvent) {
		handlerNode.attachEvent('on' + eventName, hadlerWrapper);
	}
}


var links;
var indexOf;

links = document.links;
indexOf = Array.prototype.indexOf;
delegate(document, 'click', function (node) {
    return node.nodeName === 'A' && node.href;
}, function (event) {
    console.log(indexOf.call(links, this));
    
    if (event.preventDefault) {
        event.preventDefault();
    } else {
        event.returnValue = false;
    }
});