Это происходит потому, что селектор атрибутов, совпадающих с подстрокой, тупой :
[att^=val]
Представляет элемент с атрибутом att
, значение которого начинается с префикса "val". Если "val" - пустая строка, то селектор ничего не представляет.
(Выделение мое.)
Все селекторы подстрок разбиты по дизайну: при наличии пустой строки они ничего не возвращают (вместо сопоставления со всеми строками). Я понятия не имею, почему, но это то, что сказано в спецификации селектора.
Лучшее исправление, вероятно, состоит в том, чтобы добавить проверку к вашему коду, которая говорит , если var
пусто, используйте 'div[data-mydata]'
вместо (т.е. проверяйте только наличие атрибута, а не его значение) .