Javascript JSON对象表示的jQuery选择器
我感兴趣的是获取一个jQuery选择器字符串(您放入Javascript JSON对象表示的jQuery选择器,javascript,jquery,json,regex,object,Javascript,Jquery,Json,Regex,Object,我感兴趣的是获取一个jQuery选择器字符串(您放入$())并从中生成一个包含字符串中指定的所有元素的JSON对象我对从DOM中选择不感兴趣 这种事情必须在jQuery的引擎盖下发生,我是否可以使用公共函数来实现这一点?是否有提供此功能的开源库 给定以下输入字符串: 输入[class=wood][name=cedar] 输入[class='wood'][name='cedar'] 输入[class=“wood”][name=“cedar”] 我想返回以下输出: { [ eleme
$()
)并从中生成一个包含字符串中指定的所有元素的JSON对象我对从DOM中选择不感兴趣
这种事情必须在jQuery的引擎盖下发生,我是否可以使用公共函数来实现这一点?是否有提供此功能的开源库
给定以下输入字符串:
输入[class=wood][name=cedar]
输入[class='wood'][name='cedar']
输入[class=“wood”][name=“cedar”]
{
[
elementType: 'input',
attributes: [
class: 'wood',
name: 'cedar'
]
]
}
并给出以下字符串:
输入,div
输入,div
{
[
elementType: 'input'
],
[
elementType: 'div'
]
}
这是一个相当复杂的正则表达式,如果我必须自己编写它,而且我不想重新发明轮子:)当然,可以做到:
var query = $("input, div")
var selector = [];
query.selector.split(',').forEach(function(element){
selector.push({"element": element})
});
console.log(selector)
将为您提供:
[
{
elementType: 'input'
},
{
elementType: 'div'
}
]
这是一张工作票
工作原理:
您可以检查任何jQuery选择器对象,您将发现一个名为
selector
的属性。这是查询的字符串表示形式。只要为您需要的JSON结构提供正确的解析器,就完成了 这里是元素和属性支持,完整的jQuery选择器语法将使这一点更加复杂
下面是正在运行的代码的jsBin
您始终可以创建内存中的HTML元素。该元素是一个具有属性和值的HtmleElement对象。你可以说
this.food=“soup”
等等,但是你必须自己构建它。但是我希望你意识到type>wood
和food>soup
都是无效的元素属性。这就是为什么我指定我不是从DOM中选择的。就本例而言,这并不重要。如果您喜欢@RokoC.Buljan,我可以在属性前面抛出数据-
。我想您可能在问XY问题。你到底在干什么?我想问的是,如果你解释一下你想做什么,可能有比你最初认为最好的解决方案更好的解决方案。@RokoC.Buljan这不是XY问题。我想使用现有的jQuery选择器语法创建一些全新的东西。谢谢,但这不是我想要的。我或多或少需要一整套jQuery选择器,就像您在这里看到的单个元素一样,但我还需要属性选择器,在我问题的第一个示例中。这是一个更难编写的正则表达式。我从+\[(.+)\]
开始,意识到我不想从头开始发明整个东西。
var main = {}
main.getAttributes = function (selector) {
var attributes = selector.match(/(\[[^\]]*\])/g)
return _.chain(attributes).map(function (attribute) {
attribute = attribute.match(/\[(.+)\]/)[1]
attribute = attribute.split('=')
var key = attribute[0]
var value = attribute[1].replace(/['"]+/g, '', '')
return [key, value]
}).object().value()
}
main.parseSelector = function (selectorStr) {
var selectors = selectorStr.split(',')
return _.map(selectors, function (selector) {
selector = selector.replace(/^\s+|\s$/, '')
return {
'elementType': selector.match(/([^\[\]]*)/)[0],
'attributes': main.getAttributes(selector)
}
})
}
var selectorStr = 'input[type=checkbox][class=fun]'
var obj = main.parseSelector(selectorStr)
console.log(obj)