Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как получить url всех элементов nodeList ? (https://javascript.ru/forum/dom-window/77976-kak-poluchit-url-vsekh-ehlementov-nodelist.html)

maxim1978 09.07.2019 06:57

Как получить url всех элементов nodeList ?
 
Столкнулся с проблемой
Я хочу в зависимости от соотношения сторон изображения получить в кансоле уведомление и делаю это так :

let images = document.querySelectorAll("img");

images.forEach(function(url){
    
    let img = new Image();
    img.src = url;
    img.onload = e = console.log(url, ar(img));
    
 
})

function ar(img){
    if(img.width > img.height) {
        return"Альбом"
    }
    
    if(img.width < img.height) {
        return"Портрет"
    }
    
    if(img.width == img.height) {
        return"Квадрат"
    }
}


Разумеется что существует папка img в которой три изображения разных соотношений сторон
1) Вертикальная
2) Альбомная
3) Квадратная

В index.html просто написано

<img src="img/pic1.png" alt="">
 <img src="img/pic2.png" alt="">
 <img src="img/pic3.png" alt="">




Но в кансоль выводит вот это :



Почему такой вывод когда ожидается вывести то что в return и должно выводится url ?

laimas 09.07.2019 07:42

Строки 3-10 кода, должно быть

images.forEach(function(url){
    let img = new Image();
    img.src = url.src;
    img.onload = function() {
        console.log(ar(this))      
    }
});


PS. А функцию возвращающую отношения сторон можно описать короче, тернарным оператором:

return img.width > img.height ? "Альбом" : img.width < img.height ? "Портрет" : "Квадрат"

maxim1978 09.07.2019 08:07

Цитата:

Сообщение от laimas (Сообщение 510019)
Строки 3-10 кода, должно быть

images.forEach(function(url){
    let img = new Image();
    img.src = url.src;
    img.onload = function() {
        console.log(ar(this))      
    }
});


PS. А функцию возвращающую отношения сторон можно описать короче, тернарным оператором:

return img.width > img.height ? "Альбом" : img.width < img.height ? "Портрет" : "Квадрат"

спасибо - помогло

laimas 09.07.2019 08:07

Цитата:

Сообщение от maxim1978
а почему не выводится url перед aspectRatio ?

У кого, в вашем коде? Потому как вы выводите объект.
У меня? Потому, что я его не вывожу, но добавьте коли надо:

console.log(this.src, ar(this))

maxim1978 09.07.2019 08:15

Цитата:

Сообщение от laimas (Сообщение 510022)
У кого, в вашем коде? Потому как вы выводите объект.
У меня? Потому, что я его не вывожу, но добавьте коли надо:

console.log(this.src, ar(this))

Всё сделано ..спасибо ..здесь можно отметить решением ?

laimas 09.07.2019 08:35

Цитата:

Сообщение от maxim1978
здесь можно отметить решением ?

Не понял, что отметить?

maxim1978 09.07.2019 08:45

Цитата:

Сообщение от laimas (Сообщение 510024)
Не понял, что отметить?

к примеру как в stackoverflow или как на toster можно ответ отметить решением, здесь наверно такого нету

laimas 09.07.2019 08:49

Цитата:

Сообщение от maxim1978
здесь наверно такого нету

Есть - http://javascript.ru/formatting

maxim1978 09.07.2019 09:00

Цитата:

Сообщение от laimas (Сообщение 510026)

неее...не это ..не оформление вопроса а именно отметить Твой ответ как решение ладно проехали

рони 09.07.2019 10:47

maxim1978,
здесь темы не закрывают и не отмечают пост, как решение, достаточно спасибо и сообщения, что такой-то пост помог, и возле ника в этом сообщении есть + для кармы.

Malleys 09.07.2019 15:08

maxim1978, это плохая идея, поскольку иногда ответы на stackoverflow, отмеченные как решение, намного хуже, чем неотмеченный соседний ответ, который набрал даже больше отметок нравится!

Технологии со временем улучшаются, и то что было 10 лет как единственное возможное решение, сегодня может быть одним из решении, и может не самого лучшего качества!

Насчёт вашего кода, в котором laimas предложил столько изменении... Вы всего лишь пропустили знак > на 7-ой строке в посте №1!

Т.е вместо
img.onload = e = console.log(url, ar(img));
нужно
img.onload = e => console.log(url, ar(img));

laimas 09.07.2019 15:49

Цитата:

Сообщение от Malleys
Насчёт вашего кода, в котором laimas предложил столько изменении... Вы всего лишь пропустили знак >

Точно? Вообще-то ошибка до этого, а именно тут img.src = url;, а далее хоть что не будет работать. И то что я не стрелочную функцию написал, так небо не низверглось на землю грешную от этого. Успокойтесь, и без апломба.

Malleys 09.07.2019 21:44

Цитата:

Сообщение от laimas
Точно? Вообще-то ошибка до этого, а именно тут img.src = url;, а далее хоть что не будет работать.

Я проверял, в предыдущей строке нет ошибки! https://codepen.io/Malleys/pen/WqLZKz?editors=1011

Цитата:

Сообщение от laimas
И то что я не стрелочную функцию написал, так небо не низверглось на землю

Судя по коду там предполагалась именно стрелочная функция! Совершенно не понятно, что вы этим хотели сказать!

Цитата:

Сообщение от laimas
небо не низверглось на землю грешную от этого.

А что является мерой греха земли? С планетой всё в порядке! И почему вы совершаете подмену... Это людям свойственно ошибаться (например, я ничего не сказал про деструктуризацию аргумента в прошлом посте, это ошибка)

Цитата:

Сообщение от laimas
без апломба

зато с кодом на codepen

Цитата:

Сообщение от laimas
Успокойтесь

Я ничего незаурядного и не делал!

Цитата:

Сообщение от laimas
я не стрелочную функцию написал, так небо не низверглось на землю грешную от этого.

Т. е. по вашему получается, что когда напишут стрелочную функцию, то произойдёт катаклизм? На GitHub имеется огромное количество кода со стрелочными функциями (и поверьте, они не только в JS есть), однако это никак не влияет на атмосферу и околоземное космическое пространство!

laimas 09.07.2019 21:49

Бредятина.


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