Помогите переделать jQuery на native JavaScript

LeonCrab
На сайте с 30.01.2007
Offline
189
2247

Помогите переделать скрипт, написанный под jQuery на нативный JavaScript, а то я ни с тем, ни с другим не дружу :(.

Код скрипта:


$(document).ready(function(){
$('.bmk').click(function(){
window.location='/';return false;
});
});

$(document).ready(function(){
$('.nclass img').click(function(){
window.location=$(this).parent().find('a').attr('href');return false;
});
});

$(document).ready(function(){
$('#pnl').prepend('<p><a href="http://site.ru" title="title">exit</a></p>');
});

$(document).ready(function() {
$('footer').append('<p class="inf">other text.</p>');
});

$(document).ready(function() {
var pubdate = $('#pbinf').attr('class');
var date = new Date(pubdate*1000);
var year = date.getFullYear();
var month = ('0'+(date.getMonth()+1)).slice(-2);
var day = ('0'+(date.getDate()+1)).slice(-2);
var published = day + '.' + month + '.' + year;
$('#pbinf').prepend('<span class="publd">' + published + '</span>');
});
Помощь в создании сайтов на MODX, Laravel, Slim. В личку. Хостинг, которому я доверяю (https://beget.com/p181956).
LeonCrab
На сайте с 30.01.2007
Offline
189
#1

С основной частью разобрался самостоятельно, осталось только:

$(document).ready(function(){

$('.nclass img').click(function(){
window.location=$(this).parent().find('a').attr('href');return false;
});
});

Что никто так и не поможет? :(

Ayavryk
На сайте с 11.10.2003
Offline
209
#2

$('.nclass img') - если бы это было кроссброузерно реализуемо в двух строках кода, jQuery в 90% был бы не нужен :)

В двух словах - вам нужно распарсить весь DOM, определить класс узла, определить есть ли среди дочерних элементов на любой глубине вложенности img, а потом начать плясать обратно по дереву. В общем, гуглите javascript getElementsByClassName.

Кстати, в jquery для поиска в DOM по css используется библиотека sizzle у нее есть куча альтернатив. некоторые совсем маленькие 2-3К в сжатом виде. По этой теме можно гуглить "css selector engines"

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
LeonCrab
На сайте с 30.01.2007
Offline
189
#3

Да хрен с ней, с этой кросбраузерностью.

Это будут проблемы пользователей со старыми версиями ИЕ (до 8 включительно, в итоге - около 7-8%, а в перспективе - еще меньше). 9ИЕ вроде бы поддерживает getElementsByClassName.

Так как же будут выглядеть эти некросбраузерные

Ayavryk:
в двух строках кода
?

Вот готовый код блока (их много на странице) и логика: при щелчке на картинке пользователя необходимо направить на url_0.htm

<div class="nclass">
<h2><a title="text" href="url_0.htm">text</a></h2>
<p>text</p>
<img title="text" src="image.png" alt="text">
<ul>
<li><a title="text" href="url_1.htm">text</a></li>
<li><a title="text" href="url_2.htm">text</a></li>
....
</ul>
....
</div>

П.С. делать img ссылкой нельзя, только "голый" javascript 😂

Jekyll
На сайте с 04.05.2009
Offline
136
#4
LeonCrab:
П.С. делать img ссылкой нельзя, только "голый" javascript

Религия? :D

LeonCrab
На сайте с 30.01.2007
Offline
189
#5
Jekyll:
Религия? :D

Все гораздо хуже ;)

n0name
На сайте с 22.12.2006
Offline
54
#6

Если старые браузеры не важны, то можно так:

var imgs = document.querySelectorAll('.nclass img');
for (var i = 0; i < imgs.length; i++) {
imgs.addEventListener('click', function() {
alert('ff');
});
}
Сервис сравнения цена на VPS (http://vpska.com/)
LeonCrab
На сайте с 30.01.2007
Offline
189
#7
n0name:
Если старые браузеры не важны, то можно так:
var imgs = document.querySelectorAll('.nclass img');

for (var i = 0; i < imgs.length; i++) {
imgs.addEventListener('click', function() {
alert('ff');
});
}

К сожалению, работает неправильно (или я туплю). Если заменить alert('ff') на alert(i) то вместо текущего i в алерте выводится общее кол-во найденных элементов. :(

Ayavryk
На сайте с 11.10.2003
Offline
209
#8

function setClick(img,a) { // установка связи картинки с ссылкой

img.onclick = function(){

//alert(a.getAttribute('href'));

location.href = a.getAttribute('href');

}

}

var i,p,a;

for (i=0;i<document.images.length;i++) { // перебираем картинки

p=document.images.parentNode; // определяем родительский элемент
if (p.className == 'nclass') { // проверяем его класс
a = p.getElementsByTagName('H2'); // если находим H2 внутри родительского элемента
if (a.length) {
// устанавливаем связь между картинкой и ссылкой
// полагая что ссылка всегда есть
setClick(document.images,a[0].childNodes[0]); //
}
}
}
в ie6 не проверял, но должно работать.

LeonCrab
На сайте с 30.01.2007
Offline
189
#9

Проблема решена. Надо было всего-навсего разобраться с замыканиями в js.

Огромное спасибо всем откликнувшимся.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий