【问题标题】:Regex in javascript replace functionjavascript替换函数中的正则表达式
【发布时间】:2017-10-07 23:07:26
【问题描述】:

我是正则表达式的新手,我正在尝试在 java 脚本中执行一些正则表达式替换功能,这是我的内容和代码

jQuery("td[headers='name_head']").each(function (index, value) { 
var text = jQuery(this).html();
if( text.indexOf('<a href=') >= 0){
jQuery(this).text(text.replace(/<a href=.*\"$/, "")); 

}
});

Html 内容会是这样的

 <a href="/sf/tracker/do/editField/projects.srk_test_pro_ject/tracker.Activity?fieldid=fild20226" class="DisableItemLink" onclick="javascript:return ((adminTrackerForm.hasChanges.value == 'true' &amp;&amp; confirm('You have unsaved changes to your field ordering. If you proceed, your ordering changes will be lost. Continue?')) || adminTrackerForm.hasChanges.value == 'false');">Calculate Points</a>

我只想删除 href ""中的值

请多指教

问候 萨蒂什

【问题讨论】:

  • 你能发布你的尝试和结果吗
  • 考虑到您的正则表达式读取“&lt;a href= 后跟任意数量的字符,然后 " 在字符串的末尾”......祝你好运。
  • 你可以在这里尝试正则表达式 regex101.com 因为我不太确定预期的输出是什么
  • @ValentinCoudert 预期的输出只是将 href 值设为空“”

标签: javascript jquery regex dom


【解决方案1】:

text() 方法只检索不包含任何 HTML 标记的文本内容。您可以将 html() 方法与回调函数一起使用,您可以在其中获取旧的 HTML 内容作为回调的第二个参数,并根据旧值生成更新的 HTML。


更好的方法是直接选择a标签的href属性值更新为空,不需要循环它们,因为所有值都需要为空。
jQuery("td[headers='name_head'] a").attr('href', '');

更新 1:如果您想根据条件进行迭代并执行一些操作,请执行以下操作。

jQuery("td[headers='name_head'] a").each(function(){
  if(//your ondition){
    $(this).attr('href', '');
  }
});

jQuery("td[headers='name_head']").each(function(){
  if(//your ondition){
    $('a', this).attr('href', '');
  }
});

更新 2 :如果您想删除整个属性,请使用 removeAttr('href') 方法删除整个属性本身。

jQuery("td[headers='name_head'] a").removeAttr('href');

【讨论】:

  • 我写了 for 循环,因为我不想更改所有值,我稍后在 if 条件中添加条件
  • @sathishkumar :在这种情况下,在回调中执行 $(this).find("a").attr('href', '');$("a", this).attr('href', '');
  • 它工作 Pranav 非常感谢最后一个问题,如果你不介意删除整个 href 而不是只删除 href 内容我想完全删除 href = ""
  • @sathishkumar : 检查上次更新,使用removeAttr() 方法
【解决方案2】:

为什么要重新发明轮子?

你不需要正则表达式来实现这一点,你可以简单地这样做:

jQuery("td[headers='name_head'] a").attr('href', '');

它会将td[headers='name_head'] 中的所有&lt;a&gt; 元素设置为href"",因此它将始终尊重您的条件。

【讨论】:

  • 为什么要进行 foo 循环是因为我只想删除 href 的某些 contion 其余的 href 应该保留
  • 这只会删除某些&lt;a&gt;元素。
【解决方案3】:

我没有测试过这段代码;但是这样的事情应该会有所帮助,不要认为您需要为此使用正则表达式;

$('a.DisableItemLink[href!=''][href]').each(function(){
    var href = $(this).attr('href');
    // do something with href
})

这段代码选择所有具有类 DisableItemLink 并设置了位置的元素并将其设置为空白。

我很好奇你在更大的计划中试图做什么,听起来可能有更好的方法来解决它。

参考:some good selector combinations for links

【讨论】:

  • 感谢您的回复 Nishan 实际上正在尝试删除 td 中某些文本的整个属性 href 只是 href 内容
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 2010-11-12
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2014-01-26
相关资源
最近更新 更多