如何动态修改网页元素的属性?

本文讲述了作者在使用uniapp框架时遇到的一个问题,即通过JavaScript尝试动态修改网页元素的灰度值,起初使用`document.getElementById`方法在HBuilder内置浏览器中正常工作,但在实际手机上运行时出现错误。经过探索,作者找到了新的解决方案,通过在HTML中使用`@click`和`:style`结合数据绑定,成功实现了动态修改元素属性的目标,避免了跨平台兼容性问题。

最近遇到一个需求,需要动态修改网页某个元素的属性,具体来说就是灰度值。我用的是uniapp这个框架,一开始我使用百度搜“js 控制style里的数值大小”,然后找到下面这样的解决方案:

document.getElementById("resume").style.filter="grayscale(100%)"

但奇怪的是,这个方案在hbuilder的内置浏览器里运行的好好的,一旦运行在真实的手机上,就会报错,错误如下:

Cannot read property 'getElementById' of undefined

由于本人功力尚浅,不知道这到底是怎么一回事,问过度娘也没找到想要的答案。于是只能把上面的解决方案废弃,寻找其他的方案。

最后皇天不负有心人,还是被我找到了。代码如下:

<view id="diploma" class="f-header m-t" @click="showDiploma" :style="{filter: diplomaGray}">

...

diplomaGray: 'grayscale(100%)'

这样在js代码里只需要修改变量diplomaGray的值就能达到修改对应网页元素的属性的目的了。

(全文完)

在C++中使用WebView2控件处理动态加载的网页元素,要在元素加载后修改属性,可借助WebView2的事件机制和JavaScript来实现。以下是实现此功能的具体步骤和示例代码: #### 监听网页加载完成事件 WebView2提供了`ICoreWebView2::add_NavigationCompleted`方法,用于在网页导航完成时触发回调。不过动态加载的元素可能在导航完成后才出现,因此还需结合JavaScript来监听元素加载。 #### 使用JavaScript监听元素加载 在JavaScript里,可使用`MutationObserver`来监听DOM的变化,一旦目标元素加载完成,就修改属性。 以下是示例代码: ```cpp #include <windows.h> #include <wil/com.h> #include <webview2.h> // 假设这是你的WebView2实例 wil::com_ptr<ICoreWebView2> webview; // 定义导航完成事件的回调 class NavigationCompletedEventHandler : public winrt::implements<NavigationCompletedEventHandler, ICoreWebView2NavigationCompletedEventHandler> { public: IFACEMETHODIMP Invoke(ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args) noexcept { // 执行JavaScript代码来监听元素加载 std::wstring script = LR"( var targetElementId = 'yourElementId'; var observer = new MutationObserver(function(mutationsList, observer) { for(var mutation of mutationsList) { if (mutation.type === 'childList') { var targetElement = document.getElementById(targetElementId); if (targetElement) { targetElement.style.color = 'red'; observer.disconnect(); // 停止监听 } } } }); observer.observe(document.body, { childList: true, subtree: true }); )"; HRESULT hr = sender->ExecuteScript(script.c_str(), nullptr); if (FAILED(hr)) { // 处理错误 } return S_OK; } }; // 初始化WebView2并设置导航完成事件 void InitializeWebView2() { // 初始化WebView2的代码... // 设置导航完成事件处理程序 wil::com_ptr<NavigationCompletedEventHandler> eventHandler = winrt::make<NavigationCompletedEventHandler>(); EVENT_REGISTRATION_TOKEN token; webview->add_NavigationCompleted(eventHandler.get(), &token); } ``` 在上述代码中,`NavigationCompletedEventHandler`类实现了`ICoreWebView2NavigationCompletedEventHandler`接口,在`Invoke`方法里执行JavaScript代码。JavaScript代码使用`MutationObserver`监听`document.body`的子节点变化,当目标元素加载完成后,修改其文本颜色为红色,并停止监听。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值