Как я могу запретить Cufón заменять текст в элементах определенного класса? - PullRequest
0 голосов
/ 09 июня 2011

Я использую Cufón для замены текста на веб-странице, и у меня загружена библиотека jQuery. Я пытаюсь заменить все экземпляры <li> элементов (среди прочих, таких как <p> и т. Д.), Но только когда они не появляются в определенном классе.

Вот пример HTML:

<ul>
   <li>This</li>
   <li>Should</li>
   <li>Be Replaced</li>
</ul>
<div>
  <ul>
    <li>So should</li>
    <li>this</li>
  </ul>
</div>
<div class='no-cufon'>
   <ul>
      <li>Don't replace this</li>
   </ul>
</div>

Обратите внимание, что большая часть моего HTML является динамической, иначе я просто изменил бы разметку.

Я использую команду Cufon.replace('*:not(.no-cufon) li'); для замены текста, но он по-прежнему нацелен на все <li> теги

В консоли разработчика (Chrome 12) я получаю следующие значения с помощью этих селекторов jQuery:

$("body *").length
11
$("body *:not(.no-cufon)").length
10
$("body * li").length
6
$("body *:not(.no-cufon) li").length
6

По какой-то причине теги <li> в классе no-cufon все еще сопоставляются в моем последнем селекторе jQuery.

Так что, если это не сработает - что будет?

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Как насчет фильтра () ?С помощью следующего он выбирает все li элементы, которые не имеют no-cufon родителей.

Cufon.replace($('li').filter(function(){
    if ($(this).parents('.no-cufon').length == 0) return true;
}));

пример: http://jsfiddle.net/niklasvh/prr4W/

1 голос
/ 09 июня 2011

body :not(.no-cufon) li соответствует тем же li с, что и body .no-cufon ul li, потому что сами ul * :not(.no-cufon).

Попробуйте вместо этого:

Cufon.replace('body > :not(.no-cufon) > li, body > :not(.no-cufon) > ul > li');
...