【问题标题】:Jquery Select an attribute with slashsJquery选择带有斜杠的属性
【发布时间】:2017-03-27 12:15:00
【问题描述】:

我正在尝试通过作为唯一文件名的属性值来选择具有 JQuery 过滤的对象。 I can't escape from slashes when the selector is made with a var.我在尝试多种组合时浪费了 2 个小时,但我认为我遗漏了一些东西。提前感谢您的光

我的 HTML:

<table class="table table-condensed" id="CLKPMTable_2"><tbody><tr class="click-row" valuetype="PM" filename="\\server\folder\file1" paymentmethodid="1"><td class="col-md-1"><img width="24" height="24" src="/Content/img/123.png" id="PMURLIMG_"></td><td class="col-md-10" id="PM_FILENAME_">BO OCT</td><td class="col-md-1 text-right"><img width="16" height="16" src="/Content/img/notyet.png" id="PM_STATUS_"></td></tr><tr class="click-row" valuetype="PM" filename="\\server\folder\file2" paymentmethodid="2"><td class="col-md-1"><img width="24" height="24" src="/Content/img/visa.png" id="PMURLIMG_"></td><td class="col-md-10" id="PM_FILENAME_">O SEP</td><td class="col-md-1 text-right"><img width="16" height="16" src="/Content/img/notyet.png" id="PM_STATUS_"></td></tr></tbody></table>

我的 Javascript:

var filename = "\\server\folder\file1";
var selec = $('tr[valueType="PM"][filename="'+filename+'"]');
alert(selec.attr("paymentmethodid"));

两者都不适用:

var filenamescaped = filename.replace('\\','\\\\')
var selec = $('tr[valueType="PM"][filename="'+filenamescaped+'"]');

也没有与(来自:Jquery official doc to escape chars used in css):

function jq( myid ) {
 return myid.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
}

 var filename = "\\server\folder\file1";
  var filenamescaped = jq(filename);

我的提琴手做一些测试: jsfiddler

【问题讨论】:

  • 不能使用替换双转义斜线
  • 这是您要找的吗? var filename = "\\\\server\\folder\\file1"; alert("Test: "+filename); 这转义了反斜杠。
  • 尝试使用.replace("/","//")而不是.replace("//","////");第二个不会替换单斜杠。
  • 所以\fs 正在变成换页符;即使它们不是 f,反斜杠在替换发生之前仍然会“用完”,因为它们是在字符串声明中评估的,而不是在使用它的地方。至于解决方案,我还是不知道......
  • 问题在于,当您有机会运行替换命令时,反斜杠已经消失了。

标签: javascript jquery html jquery-selectors escaping


【解决方案1】:

在这种情况下,值的反斜杠需要加倍才能用作有效的选择器

var filename = "\\\\\\\\server\\\\folder\\\\file1";
var selec = document.querySelector('tr[valueType="PM"][filename="'+filename+'"]');
alert(selec.getAttribute("paymentmethodid"));
&lt;table class="table table-condensed" id="CLKPMTable_2"&gt;&lt;tbody&gt;&lt;tr class="click-row" valuetype="PM" filename="\\server\folder\file1" paymentmethodid="1"&gt;&lt;td class="col-md-1"&gt;&lt;img width="24" height="24" src="/Content/img/123.png" id="PMURLIMG_"&gt;&lt;/td&gt;&lt;td class="col-md-10" id="PM_FILENAME_"&gt;BO OCT&lt;/td&gt;&lt;td class="col-md-1 text-right"&gt;&lt;img width="16" height="16" src="/Content/img/notyet.png" id="PM_STATUS_"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="click-row" valuetype="PM" filename="\\server\folder\file2" paymentmethodid="2"&gt;&lt;td class="col-md-1"&gt;&lt;img width="24" height="24" src="/Content/img/visa.png" id="PMURLIMG_"&gt;&lt;/td&gt;&lt;td class="col-md-10" id="PM_FILENAME_"&gt;O SEP&lt;/td&gt;&lt;td class="col-md-1 text-right"&gt;&lt;img width="16" height="16" src="/Content/img/notyet.png" id="PM_STATUS_"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

更新

在您的特定情况下,filename 值需要已经转义才能使替换工作,如var filename="\\\\server\\folder\\file1"

请注意替换命令中的全局开关,以便替换所有出现的地方

var filename = "\\\\server\\folder\\file1";
var filenamescaped = filename.replace(/\\/g,'\\\\\\\\');
var selec = $('tr[valueType="PM"][filename="'+filenamescaped+'"]');
alert(selec.attr("paymentmethodid"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-condensed" id="CLKPMTable_2"><tbody><tr class="click-row" valuetype="PM" filename="\\\\server\\folder\\file1" paymentmethodid="1"><td class="col-md-1"><img width="24" height="24" src="/Content/img/123.png" id="PMURLIMG_"></td><td class="col-md-10" id="PM_FILENAME_">BO OCT</td><td class="col-md-1 text-right"><img width="16" height="16" src="/Content/img/notyet.png" id="PM_STATUS_"></td></tr><tr class="click-row" valuetype="PM" filename="\\server\folder\file2" paymentmethodid="2"><td class="col-md-1"><img width="24" height="24" src="/Content/img/visa.png" id="PMURLIMG_"></td><td class="col-md-10" id="PM_FILENAME_">O SEP</td><td class="col-md-1 text-right"><img width="16" height="16" src="/Content/img/notyet.png" id="PM_STATUS_"></td></tr></tbody></table>

【讨论】:

  • 不行,他不能直接改变变量,只有替换命令,此时反斜杠已经消失了。尽管我认为这在代码的这一点上甚至无法解决;它必须提前“修复”,所以这不是你的错。
  • 谢谢。我从中得到了这个解决方案:bugs.jquery.com/ticket/14417 实际上,我正试图将这个逻辑插入“替换”,正如@Feathercrown 所说,我无法对逻辑进行硬编码,并且替换似乎不起作用方式(\\ by \\\\\\\)
  • 尝试了几种方法@LGSon,我无法用四个斜杠替换斜杠替换:S
  • @LeandroTupone 我也在测试,会再试几次
  • @LeandroTupone 更新了我的答案......可能会或可能不会帮助但显示需要什么
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多