#javascript
#javascript
Вопрос:
Используя vanilla js, я собрал однострочную строку, которая принимает длинную функцию, сначала проверяет, имеет ли она допустимое значение (не null), и если оно имеет допустимое значение, чтобы использовать эту длинную функцию несколько раз сокращенным способом.
Код для этого примерно такой:
(x => {if (!x) return; x.style.color='brown'; x.style.fontWeight='600';})(document.evaluate('//ul[@class="main-menu"]//li[text()="About"]', document, null, 9).singleNodeValue;);
HTML, с которым он может работать, будет примерно таким:
<ul class="main-menu">
<li>Home</li>
<li>About</li>
</ul>
Длинный способ сделать это был бы примерно таким:
var x = document.evaluate('//ul[@class="main-menu"]//li[text()="About"]', document, null, 9).singleNodeValue;
if (x) {
x.style.color='brown';
x.style.fontWeight='600';
}
Мой окончательный код на самом деле больше похож на это:
const $e = (xpath) => { return document.evaluate(xpath, document, null, 9).singleNodeValue; }
(x => {if (!x) return; x.style.color='blue'; x.style.fontWeight='900';})($e('//ul[@class="main-menu"]//li[text()="Home"]'));
(x => {if (!x) return; x.style.color='brown'; x.style.fontWeight='600';})($e('//ul[@class="main-menu"]//li[text()="About"]'));
Хотя я усердно работал над созданием этих однострочников, я чувствую, что мог бы сделать что-то лучше.
Я оставляю это гуру, чтобы посмотреть, можно ли это улучшить, пожалуйста.
Если нет, я просто использую то, что у меня есть, кажется, это работает…
Требования следующие:
- Одна ДЛИННАЯ функция должна быть введена только один РАЗ … предпочтительно Xpath, но любая функция должна работать.
- Вывод этой функции должен быть проверен и действителен, прежде чем продолжить. (не false, не null)
- Функция LONG может использоваться несколько раз сокращенным способом, если вывод допустим.
- Одна строка, если это возможно. Более 80 символов — это «нормально», но не намного больше.
- К сожалению, это нужно сделать в ванильном javascript.
- Я бы предпочел не объявлять никаких переменных.
Спасибо. Наслаждайтесь. Я с нетерпением жду любых ответов.
Комментарии:
1. Я ничего не знаю ни о вас, ни о вашей истории, так что отнеситесь к этому с недоверием, но настоящим профессиональным программистам все равно, сколько строк занимают их функции (предварительная минимизация). Они заботятся о том, чтобы их функции были понятны и удобны в обслуживании, и могли быть использованы более поздними программистами с легкостью и с минимальным количеством дополнительной документации, насколько это возможно. То, что вы описываете, называется «code golf». На самом деле у нас есть сайт в сети Stack Exchange для этого, Code Golf , но вы должны проверить их справочный центр , прежде чем размещать там.
2. Я ценю ваш ответ. В данном случае читаемость не является обязательным требованием, просто краткость. Я никогда не слышал о Code Golf, но это звучит интересно.
Ответ №1:
Я обнаружил, что необязательная цепочка — лучший способ для меня удовлетворить мои конкретные потребности.
$e('//ul[@class="main-menu"]//li[text()="Home"]')?.style.color='blue';
Спасибо за просмотр, жаль, что кто-то не мог это предложить.
Я подумал, что это могло бы быть забавным для людей.