Как к обходному решению: IE6 не поддерживает селекторы “атрибута” CSS

У меня есть несколько рабочий подход. Я решил изменить webpack.base.conf.js вместо того, чтобы использовать решение командной строки, чтобы использовать уже существующий загрузчик с заменой строк.

Файлы собираются в функцию обратного вызова WebpackBeforeBuildPlugin, и вместо тестовой переменной на основе регулярных выражений используется функция, которая проверяет ранее собранные файлы.

const exec = require('child_process').exec;
const WebpackBeforeBuildPlugin = require('before-build-webpack');
var modFilesList = new Set([]);
const srcPath = resolve('.');

...
      rules: [{
        test: function(filename) {
          let relFilename = path.relative(srcPath, filename);
          let lint = modFilesList.has(relFilename);
          return lint
        },
        loader: 'eslint-loader',
        include: resolve('src'),
        exclude: /node_modules/,
        options: {
          formatter: require('eslint-friendly-formatter'),
          cache: false
        }
      }, {
       ... other string replacement loader ...
      }


   plugins: [
    ...
    new WebpackBeforeBuildPlugin(function(stats, callback) {
      // Collect changed files before building.
      let gitCmd = 'git diff --name-only --relative | grep -E ".*\\.(vue|js)$"';
      const proc = exec(gitCmd, (error, stdout, stderr) => {
        if (stdout) {
          let files = stdout.split('\n');
          modFilesList = new Set(files);
        }
        if (error !== null) {
          console.log(`exec error: ${error}`);
        }
      });
      callback();
    })
  ]

Единственная проблема на данный момент заключается в том, что когда происходят изменения в git-файле, они не запускают повторную линтировку на основе этих изменений файла (т. Е. Новый файл изменяется или ранее (до запуска webpack-dev-). сервер) измененные изменения файла отменяются). Я проверил все, что мог. Изменение регистрируется и сохраняется в modFilesList, тестовая функция выполняется и возвращает истину (для нового изменения в ранее неизмененном файле) или ложь в случае, если изменение было отменено. Я также играл с опцией cache безрезультатно. Похоже, что при начальной загрузке eslint-loader кэширует файлы, которые он будет хранить в будущем (не знаю, является ли это результатом использования тестовой функции вместо регулярного выражения или также в случае с регулярным выражением). Кто-нибудь имеет идею или видел это раньше (eslint-loader не обновляет список файлов)?

Обновление

Это, похоже, проблема с веб-пакетом (или один из других загрузчиков), так как eslint-loader даже не запускается при изменении файла. Однако выполняется функция test, что немного странно. Я не до конца понимаю, как работают загрузчики или как они играют вместе, поэтому может быть какой-то другой загрузчик, который вызывает это ...

14
задан nmdr 16 March 2009 в 05:15
поделиться

6 ответов

Так как IE6 по существу ограничен:

  • селекторы класса
  • Идентификационные селекторы
  • (пространство) селекторы потомка
  • псевдоселекторы a:-only

Ваши единственные опции:

  • Используйте больше классов для идентификации элементов
  • Используйте JavaScript (сильно не рекомендуемый кроме узкоспециализированных случаев)

Я нахожу очень полезным использовать в своих интересах способность присвоить несколько классов элементу путем разделения их с пространством: class="foo bar"

20
ответ дан 1 December 2019 в 05:54
поделиться

Это не возможно, не перча Ваш HTML стопкой посторонних селекторов класса, печально.

Я рекомендовал бы разработать Ваш сайт так, чтобы Ваш совершенно действительный CSS работал на людей, использующих современные браузеры, и что это все еще применимо в IE6, хотя визуально не совсем правильный. Просто необходимо найти правильный баланс между получением сайта до стандарта и наклоном назад для пользователей, которые не обновят. Это - поврежденный браузер, рассматривайте его как таковой.

26
ответ дан 1 December 2019 в 05:54
поделиться

Используйте классы, это - единственное обходное решение, печально.

2
ответ дан 1 December 2019 в 05:54
поделиться

Если вы используете jQuery на своем сайте, другой вариант - SuperSelectors - он проходит по таблицам стилей вашего сайта, динамически добавляя классы к элементам, так что даже IE6 может греться в свечение правильно поддерживаемых селекторов CSS, таких как ul li: first-child li: nth-child (odd) a: hover .

0
ответ дан 1 December 2019 в 05:54
поделиться

Если Вы хотите селектор атрибута в IE6, можно использовать Dean Edward IE.js. http://dean.edwards.name/IE7/

Это сделает IE 5 +, ведут себя намного больше как IE7

supports the following CSS selectors: 
parent > child
adjacent + sibling
adjacent ~ sibling
[attr], [attr="value"], [attr~="value"] etc
.multiple.classes (fixes bug)
:hover, :active, :focus (for all elements)
:first-child, :last-child, only-child, nth-child, nth-last-child
:checked, :disabled, :enabled
:empty, :contains(), :not()
:before/:after/content:
:lang()

У меня не было IE6 (используйте IE7), таким образом, я не могу, сказал, что он работал, но дайте ему попытку

8
ответ дан 1 December 2019 в 05:54
поделиться
5
ответ дан 1 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

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