如何在jQuery中选择特定的<option>标签以转换为Javascript对象

问题描述

我想获得第一个with pm.Model() as mod: time_in = pm.Data("time_in",df['time'].astype(float)) diet_in = pm.Data("diet_in",dummies) intercept = pm.normal("intercept",2) time_effect = pm.normal("time_weight_effect",2,shape=(4,)) diet = pm.Categorical("diet",p=[0.25,0.25,0.25],),observed=diet_in) sigma = pm.Halfnormal("sigma",2) sigma_time_effect = pm.Halfnormal("time_sigma_effect",)) weight = pm.normal("weight",mu=intercept + time_effect.dot(diet_in.T)*time_in,sd=sigma + sigma_time_effect.dot(diet_in.T)*time_in,observed=df.weight) trace = pm.sample(5000,return_inferencedata=True) 标签下面的信息,我想使用jQuery / Cheerio提取信息并将最终结果转换成字典。理想情况下看起来像这样

<option>

一直持续到最后。

const info = {
   '5.5':12773,'6':12774,}

解决方法

好吧,如果您想在jQuery中完成所有这些操作,只需使用jQuery选择器option就可以获取select元素的所有$('#attributesize-size_uswomen option'),然后在其上执行for循环$.each,轻松填充对象。

所以您的最终代码应该是这样的:

var opts = $('#attributesize-size_uswomen option:not(:first)');
var info = {};

$.each(opts,function(index,opt) {
   info[$(opt).text()] = parseInt($(opt).val())
});

console.log(info);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="size_attribute[size]" id="attributesize-size_uswomen" class="size-attribute-select">
  <option>Choose Your Size</option>
  <option value="12773" source="16004">5.5</option>
  <option value="12774" source="16006">6</option>
  <option value="12775" source="16008">6.5</option>
  <option value="14805" source="16010">7</option>
  <option value="14809" source="16012">7.5</option>
  <option value="12749" source="16014">8</option>
  <option value="14816" source="16016">8.5</option>
  <option value="14820" source="16018">9</option>
  <option value="14824" source="16020">9.5</option>
  <option value="15175" source="16022">10</option>
  <option value="15178" source="16024">10.5</option>
  <option value="15184" source="16028">11.5</option>
  <option value="15187" source="16030">12</option>
</select>

注意::由于循环中的opt本身是使用jQuery函数的常规对象,因此您需要使用$()操作数制作一个jQuery对象您可以将其用作常规的NODE对象,并使用诸如texttextContentvalue之类的javascript内置属性来获取其属性。

更新

由于在使用does not support :first伪选择器的cheerio的实现中收到错误,因此可以选择所有选项,然后在对象创建中排除第一个选项。

var opts = $('#attributesize-size_uswomen option');
var info = {};

$.each(opts,opt) {
  if (index != 0)
    info[$(opt).text()] = parseInt($(opt).val())
});

console.log(info);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="size_attribute[size]" id="attributesize-size_uswomen" class="size-attribute-select">
  <option>Choose Your Size</option>
  <option value="12773" source="16004">5.5</option>
  <option value="12774" source="16006">6</option>
  <option value="12775" source="16008">6.5</option>
  <option value="14805" source="16010">7</option>
  <option value="14809" source="16012">7.5</option>
  <option value="12749" source="16014">8</option>
  <option value="14816" source="16016">8.5</option>
  <option value="14820" source="16018">9</option>
  <option value="14824" source="16020">9.5</option>
  <option value="15175" source="16022">10</option>
  <option value="15178" source="16024">10.5</option>
  <option value="15184" source="16028">11.5</option>
  <option value="15187" source="16030">12</option>
</select>

或者,如果您想跟上受支持的Cheerio方法,请使用以下方法:

var info = {};

$('#attributesize-size_uswomen').children().slice(1).each(function() {
  info[$(this).text()] = parseInt($(this).val())
});

console.log(info);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="size_attribute[size]" id="attributesize-size_uswomen" class="size-attribute-select">
  <option>Choose Your Size</option>
  <option value="12773" source="16004">5.5</option>
  <option value="12774" source="16006">6</option>
  <option value="12775" source="16008">6.5</option>
  <option value="14805" source="16010">7</option>
  <option value="14809" source="16012">7.5</option>
  <option value="12749" source="16014">8</option>
  <option value="14816" source="16016">8.5</option>
  <option value="14820" source="16018">9</option>
  <option value="14824" source="16020">9.5</option>
  <option value="15175" source="16022">10</option>
  <option value="15178" source="16024">10.5</option>
  <option value="15184" source="16028">11.5</option>
  <option value="15187" source="16030">12</option>
</select>

,

使用$("select option:not(:first)").each

实现

CodePen