const tabletr = document.getElementsByClassName('myRequestTable')[0] !== undefined ? document.getElementsByClassName('myRequestTable')[0].querySelectorAll('tbody tr') : [] 优化代码
时间: 2024-01-26 17:04:10 浏览: 67
这段代码可以优化成以下形式:
```
const tabletr = document.querySelectorAll('.myRequestTable tbody tr');
```
这个代码会选择所有 class 名称为 `myRequestTable` 的表格中的 `tbody` 元素中的所有 `tr` 元素,并返回一个 NodeList 类型的对象。如果没有匹配的元素,它会返回一个空的 NodeList 对象,而不是 `undefined`。需要注意的是,NodeList 对象是静态的,不会自动更新。如果你需要动态的元素集合,请使用 HTMLCollection 或使用 `querySelector` 来选择元素。
相关问题
const tabletr = this.$refs.myRequestTable.$q.querySelectorAll('tbody > tr')
如果您使用的是 Quasar Framework,可以使用 `$q` 属性来访问 Quasar 的 DOM API。因此,您可以使用以下代码来获取每行的 `tr` 元素:
```javascript
const tabletr = this.$refs.myRequestTable.$q.selectAll('tbody > tr');
```
请注意,`$q` API 与原生的 DOM API 有所不同。在 Quasar 中,`$q.selectAll` 方法返回的是一个 Quasar 的 DOM 元素集合(一个 `NodeList` 对象),而不是原生的 `NodeList` 对象。因此,您可能需要对返回的元素集合调用 Quasar 的方法来访问元素。
<q-table ref="myRequestTable" class="col-md-12" style="margin-top: 15px" dense :pagination="pagination" :rows="rows" :columns="columns" row-key="FORM_ID" :selected-rows-label="getSelectedString" selection="multiple" :loading="loading" v-model:selected="selected" > </q-table>const myRequestTableRef = ref(null)onMounted(() => { const myRequestTable = myRequestTableRef.value if (myRequestTable != null) { highlightRows(myRequestTable) } }) function highlightRows(myRequestTable) { const test = this.$refs.myRequestTable const tabletr = document.querySelectorAll('.q-table tbody tr'); if (tabletr instanceof NodeList && tabletr.length > 0) { for (const row of tabletr) { const stepName = row.querySelectorAll('td')[10].innerText || ''; const isClarification = stepName === 'In Clarification' || stepName === 'Supplement Event Details'; row.style.backgroundColor = ((event.searchInfo.ViewType === 'InProcess' && isClarification) || (event.searchInfo.ViewType === 'All' && isClarification) ? 'yellow' : '') } } }
在你的代码中,你定义了 `myRequestTableRef` 并在 `onMounted` 钩子里访问了它。但是在 `highlightRows` 函数中,你又使用了 `this.$refs.myRequestTable` 来获取表格实例。
这会导致问题,因为 `this.$refs.myRequestTable` 和 `myRequestTableRef.value` 是不同的对象。在 `setup` 函数中,你使用了 `ref` 函数来创建了一个响应式引用,并将其赋值给了 `myRequestTableRef`。在模板中,你使用了 `ref` 指令来将表格实例赋值给了 `$refs.myRequestTable`。这两个引用虽然都指向同一个 DOM 元素,但是它们是不同的对象。
所以,在 `highlightRows` 函数中,你应该使用 `myRequestTable` 参数来访问表格实例,而不是使用 `this.$refs.myRequestTable`。
修改后的代码如下所示:
```html
<q-table
ref="myRequestTable"
class="col-md-12"
style="margin-top: 15px"
dense
:pagination="pagination"
:rows="rows"
:columns="columns"
row-key="FORM_ID"
:selected-rows-label="getSelectedString"
selection="multiple"
:loading="loading"
v-model:selected="selected"
></q-table>
<script>
import { ref, onMounted } from 'vue'
export default {
setup() {
const myRequestTableRef = ref(null)
onMounted(() => {
const myRequestTable = myRequestTableRef.value
if (myRequestTable != null) {
highlightRows(myRequestTable)
}
})
function highlightRows(myRequestTable) {
const tabletr = document.querySelectorAll('.q-table tbody tr');
if (tabletr instanceof NodeList && tabletr.length > 0) {
for (const row of tabletr) {
const stepName = row.querySelectorAll('td')[10].innerText || '';
const isClarification = stepName === 'In Clarification' || stepName === 'Supplement Event Details';
row.style.backgroundColor = ((event.searchInfo.ViewType === 'InProcess' && isClarification) ||
(event.searchInfo.ViewType === 'All' && isClarification) ? 'yellow' : '')
}
}
}
return {
myRequestTableRef
}
}
}
</script>
```
阅读全文