Skip to content

Vis::load返回的结果应该自动选中root元素 #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
xmh0511 opened this issue Apr 16, 2024 · 2 comments
Open

Vis::load返回的结果应该自动选中root元素 #22

xmh0511 opened this issue Apr 16, 2024 · 2 comments

Comments

@xmh0511
Copy link

xmh0511 commented Apr 16, 2024

use visdom::{types::BoxDynError, Vis};

fn main()->Result<(),BoxDynError> {
    const HTML:&str = r#"<div id="contain"><p class="item"></p></div>"#;
	let mut v = Vis::load(HTML)?;
	v.set_attr("class", Some("ppp"));
	println!("{}",v.outer_html());
	Ok(())
}

输出:

期望:

对比Jquery

let d = $(`<div id="contain"><p class="item"></p></div>`);
d.addClass("ppp");
console.log(d[0].outerHTML)

输出:

visdom 需要通过v.find("#contain").set_attr("class", Some("ppp"));手动选择元素才能设置成功

@xmh0511
Copy link
Author

xmh0511 commented Apr 17, 2024

use visdom::{types::BoxDynError, Vis};

fn main()->Result<(),BoxDynError> {
    const HTML:&str = r#"<div><p class="item"></p></div><div></div>"#;
	let v_out = Vis::load(HTML)?;
	let p = v_out.find("p").get(0).unwrap().outer_html();
	let p_clone = Vis::load(p)?;
	let p_clone = p_clone.get(0).unwrap();
	p_clone.get_attribute("class");
	Ok(())
}

这个代码会直接panic

Element node must have a meta field.

也许与这个问题相关

@fefit
Copy link
Owner

fefit commented Apr 18, 2024

这块的设计的确和 jQuery 不太相同,load 方法加载的可能是整个html页面,也可能是html片段,与 cheeriojs 中的 load 方法更类似。

// jquery 中解析的主要是元素节点
$("<!DOCTYPE html><html></html>").length // 0
$("<html></html>").length // 1

load 方法得到的是个虚拟根节点,根节点上实际上只能进行一些查找操作和节点修改操作,其它操作则可能会报上面的错误,当初为了操作相对方便, load 方法返回的数据类型也是 Elements,后面有时间打算把它做成单独的类型,限制下它的可操作范围,防止出现上面的操作错误了。感谢反馈建议!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants