Попробуйте экранировать '
с обратной косой чертой
var val = "John\'s cars";
$('#subject input[value="'+val+'"]')
из jQuery
Специальные символы в селекторах
Если вы хотите использовать любой из
метасимволы, описанные выше как
буквальная часть имени, вы должны
избежать персонажа с обратной косой чертой
(). Поскольку Javascript использует
обратная косая черта для escape-последовательностей в
строковые литералы, вы должны использовать два
обратные косые черты (\) в строковых литералах так
что будет поставлен один обратный слеш
в строку.
Пример:
"#foo\\:bar"
"#foo\\[bar\\]"
"#foo\\.bar"
Полный список символов, которые нужны
чтобы избежать: #;&,.+*~':"!^$[]()=>|/
EDIT:
, поскольку значение находится в строковом литерале, его необходимо экранировать дважды. Так что это работает
var val = "John\\'s cars";
$('#subject input[value="'+val+'"]')
Спасибо bobince за указание на это.