2017-05-06 71 views
0

本聲明工作:

$(this).closest(".myclass").addClass("myextraclass"); 

但這句話確實:

$("div").closest(".myclass").addClass("myextraclass"); 

正是在這樣的背景下被使用(與mark.js庫):

instance.markRegExp(/mypattern/gi, {className:"myclass", done: function() { 
    $(this).closest(".myclass").addClass("myextraclass"); 
    }}); 

解決方案:(禮貌Baro和Chay22):

$(node).closest(".myclass").addClass("myextraclass"); 

背景下,

instance.markRegExp(/mypattern/gi, {className:"myclass", each: function(node) { 
     $(node).closest(".myclass").addClass("myextraclass"); 
     }}); 
+0

也試圖$(this.element).closest – haz

+1

使用'each',而不是'done'得到顯着的元素。這些選項也沒有「this」引用限制。舉一個例子,https://github.com/julmot/mark.js/blob/master/src/mark.js#L772不,'.call','.apply',也不'是,使用時bind' – Chay22

+0

「完成」的功能選項返回一個數,但「每個」該函數返回這正是我一直在尋找的節點。重要的是,$(本)仍然不起作用,$(節點)必須用於訪問DOM元素 – haz

回答

3

我不知道你想要的是什麼,而不看到HTML,我認爲你的邏輯有些問題。這是因爲你在所有的元素添加myclass突出,並與closest您正在尋找與此類父親元素。


$("div").closest(".myclass").addClass("myextraclass"); 

這工作,因爲是一個簡單的jQuery命令,沒有別的。


$(this).closest(".myclass").addClass("myextraclass"); 

this在這方面是Mark對象,而不是元件突出或父親元素。


如果你想要的所有元素突出試試這個:

JSFiddle example

HTML

<div class="findhere"> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut augue neque. Cras euismod varius metus ut bibendum. 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut augue neque. Cras euismod varius metus ut bibendum. 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut augue neque. Cras euismod varius metus ut bibendum. 
</div> 

<div> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut augue neque. Cras euismod varius metus ut bibendum. 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut augue neque. Cras euismod varius metus ut bibendum. 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut augue neque. Cras euismod varius metus ut bibendum. 
</div> 

CSS

.findhere { color:red; } 
.myclass { text-decoration:underline; } 
.myextraclass { font-weight:bold; } 
.green { color:green; } 

JS

var instance = new Mark("div.findhere"); 
instance.markRegExp(/ipsum/gi, {className:"myclass", each: function(node) { 
    $(node).addClass("green"); 
    $(node).closest(".findhere").addClass("myextraclass"); 
}}); 
1

如果你正在使用jQuery的你應該使用mark.ks的jQuery的語法..

$(".context").markRegExp(regexp [, options]); 
+0

感謝,但沒有奏效 – haz