jQuery 选择器到 JSON 对象表示

Posted

技术标签:

【中文标题】jQuery 选择器到 JSON 对象表示【英文标题】:jQuery selector to JSON object representation 【发布时间】:2015-12-21 14:24:50 【问题描述】:

我有兴趣获取一个 jQuery 选择器字符串(您放入 $() 的内容)并从中生成一个包含字符串中指定的所有元素的 JSON 对象。 我对从 DOM 中进行选择不感兴趣

这种事情必须在 jQuery 的幕后发生,有没有我可以使用的公共函数来实现这一点?是否有任何提供此功能的开源库?

给定以下输入字符串:

input[class=wood][name=cedar] input[class='wood'][name='cedar'] input[class="wood"][name="cedar"]

我想返回以下输出:


  [
    elementType: 'input',
    attributes: [
      class: 'wood',
      name: 'cedar'
    ]
  ]

并给出以下字符串:

input, div input,div

我想要:


  [
    elementType: 'input'
  ],
  [
    elementType: 'div'
  ]

如果我必须自己编写它,这是一个相当复杂的正则表达式,我宁愿不必重新发明***:)

【问题讨论】:

您始终可以创建内存中的 html 元素。该元素 具有属性和值的 HTMLElement 对象。比你可以说的this.food = "soup" 等,但你必须建立你自己。 但我希望您意识到type > woodfood > soup 都是无效 元素属性。 这就是为什么我指定我没有从 DOM 中选择。出于示例的目的,这无关紧要。如果你喜欢@RokoC.Buljan,我可以在属性前面加上data- 我想你可能在问一个 XY 问题。你到底在做什么?如果您解释一下您要做什么,我在问原因 - 可能有一个比您最初认为最好的解决方案更好的解决方案。 @RokoC.Buljan 这不是一个 XY 问题。我想使用现有的 jQuery 选择器语法创建全新的东西。 【参考方案1】:

当然可以:

var query = $("input, div")
var selector = [];

query.selector.split(',').forEach(function(element)
 selector.push("element": element)
);

console.log(selector)

会给你:

[
  
    elementType: 'input'
  ,
  
    elementType: 'div'
  
]

这是一个有效的example

这是如何工作的:

您可以检查任何 jQuery 选择器对象,您会发现一个名为 selector 的属性。这是查询的字符串表示形式。只需为您需要的 JSON 结构提供正确的解析器,您就完成了。

【讨论】:

谢谢你,但这不是我要找的。我或多或少需要完整的 jQuery 选择器,例如您在此处拥有的单个元素,但我还需要属性选择器,并且在我的问题的第一个示例中。这是一个更难编写的正则表达式。我从.+\[(.+)\] 开始,并意识到我不想从头开始发明整个东西。【参考方案2】:

这里是元素和属性支持,jQuery 选择器语法的完整范围将进一步复杂化。

这是运行代码的 jsBin Example。

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)

【讨论】:

以上是关于jQuery 选择器到 JSON 对象表示的主要内容,如果未能解决你的问题,请参考以下文章

从日期选择器到 mysql/php 的奇怪日期格式

[iOS][Objective-c] 图像选择器到下一个控制器

jQuery标签选择器

Json解析器到Android中的RecyclerView? [关闭]

jQuery 选择器 -基本选择器-层级选择器-过滤选择器 -元素筛选--->基本语句

Javascript - Jquery选择器