Есть ли обходной путь для этой ошибки jQuery? - PullRequest
1 голос
/ 14 января 2010
$('> img[src="folderopen.gif"]',$scope)

Выше не получится, кажется, ошибка jQuery, есть ли обход?

Эта проблема найдена здесь:

Как определить, существует ли конкретный ребенок (.haschild ('# test [att = "test"]')) с jQuery?

РЕДАКТИРОВАТЬ

Я только что подтвердил, что это также не удастся:

$scope.children( 'img[src="folderopen.gif"]');

Ответы [ 2 ]

4 голосов
/ 14 января 2010

Проверено, и Работы:

Демо Online: http://jsbin.com/uyuri3

<p id="scope"> 
  <img src="foo.jpg" /> 
</p>

- с -

$(function(){
  var scope = $("#scope");
  alert( $(scope).children("img[src$='foo.jpg']").attr("src") );
});

- также работает с вашим оригинальным синтаксисом -

var img = $("> img[src$='foo.jpg']", scope);

Интересная ошибка

Мы знаем, что наше src значение равно foo.jpg, но следующее не выполняется:

$("img[src='foo.jpg']");

Поэтому мне было любопытно, будет ли интерпретация src в jQuery равной строковому литеральному источнику, который я предоставил в HTML:

$("img", scope).attr("src") === "foo.jpg"; // true

Это делает всю ситуацию очень странной. jQuery утверждает, что значение src равно NOT , равному «foo.jpg», когда вы передаете его как часть селектора, но оно IS равно строковому литералу, когда вы сравнить со звонка на attr().

В конце концов, $= необходимо, чтобы jQuery согласился с тем, что "foo.jpg" равно "foo.jpg". Это, конечно, ошибка, но не непреодолимая.

2 голосов
/ 14 января 2010

Вы должны просто сделать:

$(scope).children("img[src='folderopen.gif']");

Исходя из этого выражения, я предполагаю, что вы создаете какую-то древовидную структуру (например, Windows Explorer). Если это так, я настоятельно рекомендую вам вместо этого использовать классы в качестве маркеров, а не селекторы атрибутов, которые медленны в большинстве браузеров. Например, с этим CSS:

ul.tree li { background: url(folderclosed.gif); }
ul.tree li.open { background: url(folderopen.gif); }

вы бы тогда сделали:

$(scope).children("li.open")...

что будет намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...