Jquery Hide Class, когда нет класса - PullRequest
1 голос
/ 14 июля 2010

У меня есть текст под названием (16 курсов).Мне нужно скрыть только этот текст, но я не могу скрыть его, независимо от того, что я пытаюсь использовать jquery.Может ли кто-нибудь помочь, чтобы я мог спрятать этот текст?

<div id="programAttributes">
    <div class="left" id="credits">
       <h3>Credits</h3>
       <h3 class="cost">48</h3>
       (16 Courses)
    </div>
    <div class="gutter12 left">&nbsp;</div>
    <div class="left" id="costPer">
       <h3>Cost Per Credit</h3>     
       <h3 class="cost">$300</h3>                            
    </div>
</div>

Я думал, что смогу написать что-то подобное, что поможет, но я пока безуспешно.

$("#credits:not([class!=h3])").hide();

Ответы [ 6 ]

2 голосов
/ 14 июля 2010

Использование

// hides in the whole document
hideText("(16 Courses)");

// only hide inside a specific element
hideText("(16 Courses)", $('#programAttributes'));

// make it visible again
showText("(16 Courses)"); 

[ Посмотреть в действии ]

CSS

.hiddenText { display:none; }

Javascript

// escape by Colin Snover
RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

function hideText(term, base) {
  base = base || document.body;
  var re = new RegExp("(" + RegExp.escape(term) + ")", "gi");
  var replacement = "<span class='hiddenText'>" + term + "</span>";
  $("*", base).contents().each( function(i, el) {
    if (el.nodeType === 3) {
      var data = el.data || el.textContent || el.innerText;
      if (data = data.replace(re, replacement)) {
        var wrapper = $("<span>").html(data);
        $(el).before(wrapper.contents()).remove();
      }
    }
  });
}

function showText(term, base) {
  var text = document.createTextNode(term);
  $('span.hiddenText', base).each(function () {
    this.parentNode.replaceChild(text.cloneNode(false), this);
  });
}
1 голос
/ 14 июля 2010

Вы можете проверить и удалить текстовые узлы следующим образом:

​$("#credits").contents().filter(function() {
  if(this.nodeType == 3) 
    this.parentNode.removeChild(this);
});​​​​​​

Вы можете проверить это здесь , здесь будут получены все узлы ( включая текстовые узлы)с .contents(), затем мы перебираем, если это текстовый узел (.nodeType == 3), то удаляем его.

0 голосов
/ 14 июля 2010

Это текстовый узел. Переберите все родительские узлы и, если это тип textnode, скройте его. Смотрите также это:

Как выбрать текстовые узлы с помощью jQuery?

0 голосов
/ 14 июля 2010

Я бы использовал метку вокруг текста, чтобы справиться с ней с помощью jquery.

0 голосов
/ 14 июля 2010

Попробуйте обернуть текст в диапазон следующим образом:

<div class="left" id="credits">
   <h3>Credits</h3>
   <h3 class="cost">48</h3>
   <span id="toHide">(16 Courses)</span>
</div>

, тогда вы можете использовать jquery:

$("#credits > span)").hide();

функция hide () должна быть применена к элементу DOM.

0 голосов
/ 14 июля 2010

Не могли бы вы обернуть его в отдельный промежуток, а затем сделать:

$('#credits span').hide();

?

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