fefit / visdom

A library use jQuery like API for html parsing & node selecting & node mutation, suitable for web scraping and html confusion.
MIT License
110 stars 6 forks source link

是否有更好的方式获取 select 元素的值? #6

Closed zhangxianhong closed 2 years ago

zhangxianhong commented 2 years ago
let html = r##"
<!doctype html>
<html>
  <body>

    <select>
      <option value="1">1</option>
      <option value="2" selected="true">2</option>
      <option value="3">3</option>
    </select>

  </body>
</html>
"##;
let doc = Vis::load(html)?;

let select = doc.find("#select");
println!("select value is {:?}", select.text());
// select value is "\n        1\n        \n        2\n        \n        3\n        \n        "

如何获取select选中的值?当前代码希望获取为”2”

fefit commented 2 years ago

@zhangxianhong 针对表单元素,的确缺失一个 .val() 方法,我来加一下,晚点再更新一版~

fefit commented 2 years ago

@zhangxianhong 发布了v0.4.13版本,新增了 .val() 方法,现在可以比较方便的获取select等表单元素的选取值了,另外配套增加了 ":checked" 伪类,方便获取到单选框、多选框选中的元素并做下一步操作。如果使用中还有其它问题,欢迎随时反馈~!

let html = r##"
<!doctype html>
<html>
  <body>

    <select>
      <option value="1">1</option>
      <option value="2" selected="true">2</option>
      <option value="3">3</option>
    </select>

  </body>
</html>
"##;
let doc = Vis::load(html)?;

let select = doc.find("select");
// 新增了 '.val()' 方法,可以获取select/input/textarea/option等表单元素的值
assert_eq!(select.val().to_string(), "2");
// 新增了 ':checked' 伪类选择器,可以选择
let selected_option = select.find("option:checked"); // 这里等价于 select.find("option[selected]");
assert_eq!(selected_option.val().to_string(), "2");
zhangxianhong commented 2 years ago

@fefit 感谢,这么快的迭代发布,这个实现比较简洁;正是我需要的,解决了我的大问题,再次感谢!

fefit commented 2 years ago

:) 太客气了,有问题随时交流~!