Согласно Спецификации :
[att~=val]
: Представляет элемент с атрибутом att, значением которого является список слов, разделенных пробелами, одним из которых является именно «val». Если «val» содержит пробел, он никогда ничего не будет представлять (так как слова разделены пробелами). Также, если «val» - пустая строка, она никогда ничего не будет представлять.
[att*=val]
: представляет элемент с атрибутом att, значение которого содержит хотя бы один экземпляр подстроки "val". Если «val» - пустая строка, то селектор ничего не представляет.
Итак, основное отличие заключается в том, что *
означает, что val
может быть где угодно в значении атрибута, но в случае ~
val
должна указывать точную часть значения, которая может быть разделена пробелы (например, атрибут class
).
Вы можете увидеть это в действии здесь: http://jsfiddle.net/kizu/bPX9n/
[класс * = val] применяется к обоим элементам div, но [класс ~ = val] применяется к тому, где val
отделяется пробелами от других частей атрибута.