如果el包含此文本,请从中删除此字符串?

时间:2015-02-20 12:07:59

标签: javascript jquery

我正在尝试检查点击的项目是否包含某个文本,如果是,则将其删除。

<ul class="filter option-set dropdown-menu" role="menu" aria-labelledby="dropdownMenu1" data-filter-group="Agencies">
  <li><a class="btn btn-default btn-lg" href="#filter-client-any" data-filter-value="">All agencies</a></li>

  <li><a id="filter-a" class="btn btn-default btn-lg" href="#filter-agency-a" data-filter-value=".A">A</a></li>
  <li><a id="filter-z" class="btn btn-default btn-lg" href="#filter-agency-z" data-filter-value=".Z">Z</a></li>
  <li><a id="filter-c" class="btn btn-default btn-lg" href="#filter-agency-c" data-filter-value=".c">C</a></li>
  <li><a id="filter-h" class="btn btn-default btn-lg" href="#filter-agency-h" data-filter-value=".h">H</a></li>
</ul>

$(document).on( 'click touchend', '.filter a', function( event ) {
  event.preventDefault();
  var self = $(this);
  if(self.html().indexOf("All ")!=-1)
  self.html(self.html().replace("All ", ""));
});

上面的代码告诉我:Uncaught TypeError: undefined is not a function

4 个答案:

答案 0 :(得分:1)

您需要实际设置新文本内容,除此之外,检查现有字符串的条件可能不会那样。

if( $(this).text().indexOf('All ') > -1 ) {
    $(this).text(function(_, text) {
        return text.replace(/All\s+/g, '');
    });
}

答案 1 :(得分:1)

  

jQuery.contains()用于检查DOM元素是否是另一个DOM元素的后代。

您必须使用原生match()或任何其他方式。试试这个。

<a href="#">All works</a>
<script type="text/javascript">
$(document).ready(function() {
    $("a").on("click", function() {
        if ($(this).text().match("All ").index != -1) {
            $(this).text($(this).text().replace(/All /g, ''));
        }
    });
});
</script>

<强>段

&#13;
&#13;
	$(document).on('click touchend', '.filter a', function(event) {
		var self = $(this);
		if (self.html().indexOf("All ") != -1)
			self.html(self.html().replace("All ", ""));
	});
&#13;
<!doctype html>
<html lang="en">

<head>
	<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
	<script>
	</script>
</head>

<body>
	<ul class="filter option-set dropdown-menu" role="menu" aria-labelledby="dropdownMenu1" data-filter-group="Agencies">
		<li>
			<a class="btn btn-default btn-lg" href="#filter-client-any" data-filter-value="">All agencies</a>
		</li>

		<li><a id="filter-a" class="btn btn-default btn-lg" href="#filter-agency-a" data-filter-value=".A">A</a>
		</li>
		<li><a id="filter-z" class="btn btn-default btn-lg" href="#filter-agency-z" data-filter-value=".Z">Z</a>
		</li>
		<li><a id="filter-c" class="btn btn-default btn-lg" href="#filter-agency-c" data-filter-value=".c">C</a>
		</li>
		<li><a id="filter-h" class="btn btn-default btn-lg" href="#filter-agency-h" data-filter-value=".h">H</a>
		</li>
	</ul>

	
</body>

</html>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您需要替换文字。

试试这个。

$("a").on("click", function(){
    var self = $(this);
    if(self.html().indexOf("All")!=-1)
    self.html(self.html().replace("All", ""));
});

或者你可以使用$("a:contains('All')")选择器。

$("a:contains('All')").on("click", function(){
    var self = $(this);
    self.html(self.html().replace("All", ""));
});

答案 3 :(得分:0)

这对我有用:

$(document).on( 'click touchend', '.filter a', function( event ) {
  var self = $(this);
  if (self.text().indexOf("All ") > -1) {
    self.text(self.text().replace("All ", ""));
  }
});

请注意,我使用的是.text(),而不是.html()。