【问题标题】:Creating a selector for a value that is itself an escaped selector为本身是转义选择器的值创建选择器
【发布时间】:2020-12-03 23:25:56
【问题描述】:

代码:

<p id='P1"'>Hello World</p>
<datalist id="foo">
<option value='#P1\"' />
</datalist>

我发现通过转义符号字符(例如上例中的 "),我可以创建一个 CSS 选择器来与 jQuery 一起使用,以选择 ID 中带有符号字符的元素。我将这个选择器放在一个数据列表中。

问题是如何编写查询以从数据列表中获取选项?

const datalist = document.getElementById("foo");
datalist.querySelector('option[value="???"]');

//or

$("#foo > option[value="???"]');

我试过了

'#P1\"'
'#P1\\\"'

当我将“#P1”放入数据列表时,我成功检索到它

option[value="#P1"]

我只是不知道如何得到上面显示的值的答案。

【问题讨论】:

  • 使用\ 只会转义它之前的任何值并且实际上并不“存在”所以你应该选择#P1" 虽然我可能是错的

标签: javascript jquery css-selectors


【解决方案1】:

你需要双重转义。我是这样发现的:

// how does it look this way?
console.log(document.querySelector(`#foo > option[value^='#P1']`));
// aha!
console.log(document.querySelector(`#foo > option[value='#P1\\\\"']`));
// jQuery too?
console.log($(`#foo > option[value='#P1\\\\"']`)[0]);
// how about value="\☺"?
console.log(document.querySelector(`#foo > option[value='\\\\☺']`));

// fun use
document.body.appendChild( Object.assign( document.createElement("div"), {
    style: "font-size:4rem; top:-15px;position:absolute;left:5rem;",
    innerHTML: document.querySelector(`#foo > option[value='\\\\☺']`).value.slice(1), 
  } )
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id='P1"'>Hello World</p>
<datalist id="foo">
<option value='#P1\"' />
<option value="\☺" />
</datalist>

【讨论】:

  • 感谢您 (+1)。我还在为“双重转义”而苦苦挣扎——这是有道理的,但我必须努力解决它。
  • 很高兴我能帮上忙。顺便说一句,这里也一样,有点奇怪。
  • 顺便说一句,经过一些研究:&lt;option value="#P1&amp;#x22;"/&gt; 将允许您使用option[value='#P1"']
  • 是的,但数据列表中的全部意义在于/是帮助我的用户查找和使用 id 选择器。所以选项字段中的编码对他们来说太混乱了。通过这个,您正在帮助我考虑接受这样的 ID 是否值得,而不是仅仅标记它们以供用户更正。我现在认为后者风险较低,而支持此类 ID 可能会产生很多问题。谢谢!
猜你喜欢
  • 2010-10-18
  • 2017-11-13
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2018-04-16
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多