Управление. ClientID с CSS

Хотя здесь может быть полезна команда find, сама оболочка предоставляет опции для выполнения этого требования без каких-либо сторонних инструментов. Оболочка bash предоставляет расширенную опцию поддержки glob, с помощью которой вы можете получить имена файлов по рекурсивным путям, которые соответствуют нужным расширениям.

Расширенной опцией является extglob, которую необходимо установить с помощью опции shopt, как показано ниже. Опции включаются с поддержкой -s и отключаются с помощью флага -u. Кроме того, вы можете использовать еще несколько опций, то есть nullglob, в которых непревзойденный глобус сметается целиком, заменяется набором нулевых слов. И globstar, который позволяет проходить по всем каталогам

shopt -s extglob nullglob globstar

Теперь все, что вам нужно сделать, это сформировать выражение glob, включающее файлы определенного расширения, которые вы можете сделать, как показано ниже. Мы используем массив для заполнения результатов глоба, потому что при правильном цитировании и расширении имена файлов со специальными символами останутся нетронутыми и не сломаются из-за разбиения слов оболочкой.

Например, чтобы перечислить все файлы *.csv в рекурсивных путях

fileList=(**/*.csv)

Опция ** состоит в рекурсии через подпапки, а *.csv - расширение глобуса до включите любой файл упомянутых расширений. Теперь для печати реальных файлов просто сделайте

printf '%s\n' "${fileList[@]}"

Использование массива и правильное расширение в кавычках - правильный путь при использовании в скриптах оболочки, но для интерактивного использования вы можете просто использовать ls с выражение glob как

ls -1 -- **/*.csv

Это вполне может быть расширено для соответствия нескольким файлам, т.е. файлам, заканчивающимся множественным расширением (то есть аналогично добавлению нескольких флагов в команде find). Например, рассмотрим случай, когда нужно получить все файлы рекурсивных изображений, например, с расширениями *.gif, *.png и *.jpg, все, что вам нужно, это

ls -1 -- **/+(*.jpg|*.gif|*.png)

. Это вполне можно расширить, чтобы иметь отрицать результаты также. С тем же синтаксисом можно использовать результаты glob для исключения файлов определенного типа. Предположим, что вы хотите исключить имена файлов с расширениями, указанными выше, вы можете сделать

excludeResults=()
excludeResults=(**/!(*.jpg|*.gif|*.png))
printf '%s\n' "${excludeResults[@]}"

Конструкция !() является операцией отрицания, которая не включает в себя какие-либо расширения файлов, перечисленные внутри, и | является чередованием оператор, аналогичный тому, который используется в библиотеке расширенных регулярных выражений для сопоставления ИЛИ глобусов.

Обратите внимание, что эта расширенная поддержка glob недоступна в оболочке POSIX bourne и является чисто специфической для последних версий bash. Так что, если вы рассматриваете переносимость сценариев, работающих в оболочках POSIX и bash, эта опция будет неправильной.

5
задан 24 June 2009 в 14:29
поделиться

2 ответа

Нет хорошего способа сделать это. Многие разработчики используют что-то вроде этого:

<style>
#<%= MyControl.ClientID %>
{
    padding:100px;
}
</style>

Но, честно говоря, я не большой поклонник этого. Он очень жидкий и хрупкий. Начиная с ASP.NET 4.0, вы сможете управлять ClientID элемента в коде, поэтому вы можете указать идентификаторы для элементов, которые, как вы знаете, вам нужно будет настроить таргетинг с помощью CSS или JS.

А пока я рекомендую использовать классы. В системе, над которой я работаю, нам требуются классы и идентификаторы запрета для любого клиентского кода (CSS или JS), потому что это просто не стоит дополнительных накладных расходов. Классы могут прекрасно работать как идентификаторы - ничто не мешает вам иметь много уникальных (одноразовых) классов, и нет никаких серьезных проблем с работой таким образом с точки зрения ремонтопригодности.

9
ответ дан 14 December 2019 в 01:14
поделиться

Это может быть возможно несколькими способами, ни один из которых не является элегантным.

Вы можете предсказать сгенерированные идентификаторы:

#ctl$00_mycontainer_idofmylabel
{
    padding: 100px;
}

Вы можете динамически создавать свои имена классов css

cssLiteral.Text = "#" + myLabel.ClientID + @"{ padding: 100px; }";

Вы можете переопределить ClientID ваших ярлыков

myCustomLabel.ClientID = "myHandCraftedId" // where myCustomLabel is an instance of some CustomLabel class that extends Label and overrides ClientID property.
0
ответ дан 14 December 2019 в 01:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: