.not()无法按预期工作

时间:2015-04-09 11:10:52

标签: javascript jquery html joomla

我有一个a元素,其中包含svg和一个字符串。我想只选择带有jQuery和.trim()的字符串,因为它包含空格。当我尝试使用.not()进行过滤时,我收到错误“Uncaught TypeError:undefined is not function”。

想删除svg元素,但用修剪后的字符串替换未修剪的字符串。所以使用.html()可能是一个坏主意,因为它用修剪过的字符串替换整个内容。

$("document").ready(function() {
  $("p.mod-articles-category-readmore a").each(function() {
    var $str = $(this).html().not("svg");
    $(this).html($.trim($str));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="mod-articles-category-readmore">
  <a class="mod-articles-category-title">
    <svg><!--svg content--></svg>
    <!--whitespace created by Joomla-->		Weiterlesen													
  </a>
</p>

3 个答案:

答案 0 :(得分:0)

这是因为.html()返回一个没有not方法的字符串。

$(document).ready(function() {
  $("p.mod-articles-category-readmore a").each(function() {
      var str = $(this).contents().filter(function(){return this.nodeType==3}).text();
      $(this).html(str)
  });
});

相反,你可以删除svg元素,所以

$(document).ready(function() {
  $("p.mod-articles-category-readmore a svg").remove();
});

答案 1 :(得分:0)

编辑:经过多次游戏后,我设法将SVG部分拉出来并将字符串分成单独的变量:

$("document").ready(function() {
  $("p.mod-articles-category-readmore a").each(function() {
      var $svg = $(this).children().first().get(0);
      var $str = $.trim($(this).last().text());
      $html = $str + $svg;
      $(this).html($html);
  });
});

仅在尝试将两者重新注入DOM时发出,包含SVG的变量转储为jquery对象字符串。

有一个JS小提琴here可能至少可以让你开始。

答案 2 :(得分:-3)

.not(svg);

希望这有帮助。