Negation selector (:not()) should support full complex selectors according to CSS4 Selectors draft. Test case: The following throw syntax errors. document.querySelectorAll('input:not([type="button"][value])'); /* Any input that does not have both attribute: value and type="button". */ document.querySelectorAll('input:not(label input)'); /* Any input that is not contained in a label ancestor. */ document.querySelectorAll('input:not(label>input)'); /* Any input that is not contained in a label parent. */ Quoting: http://dev.w3.org/csswg/selectors4/#negation The negation pseudo-class, :not(), is a functional pseudo-class taking a selector list as an argument. It represents an element that is not represented by its argument. In the fast Selectors profile, only lists of compound selectors are allowed within :not(): combinators are not allowed. In the complete profile, full complex selectors are allowed.
<rdar://problem/13987429>
Done.
http://trac.webkit.org/changeset/174535 http://trac.webkit.org/changeset/174669 http://trac.webkit.org/changeset/174914 http://trac.webkit.org/changeset/175432 http://trac.webkit.org/changeset/175453