Почему closest () и text () с jquery не работают - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть особый случай, когда я хотел бы получить текст элемента DIV с указанным c именем класса, которое ближе всего к выделенному тексту. Может быть несколько DIV с одним и тем же именем класса, поэтому я пытаюсь найти ближайший. Я получаю выделенный текст и HTMLDIVELEMENT, где выделенный текст, от getSelectionTextAndContainerElement (). Теперь я пытаюсь найти ближайший элемент DIV с классом blogUser. Hier мой HTML код:

    <div class = "tHead">
    <div class = "tRow">
        <div class = "tCell">
<h1>{sBlogs.0.blogName}</h1>
        </div>
    </div>
</div>
    <f:for each="{sBlogs}" as="blog">
        <div class = "tSub">
            <div class = "tRow">
                <div class = "tCell blogUser">
    User: {blog.blogUser}
                </div>
                <div class = "tCell blogDate">
    Date: {blog.blogDate -> f:format.date()}
                </div>
                <div class = "tCell blogCat">
    Category: {blog.blogCat}
                </div>
            </div>
        </div>
        <div class = "content">
    {blog.blogContent}
        </div>
        <div class="links">
        <f:image class="reply" src="EXT:simpleblog/Resources/Public/Icons/search.svg" />
        </div>

    </f:for>
<div class="replyBlog">
    <f:form.textarea class="editBlog" property="editBlog" rows="10" cols="80"/>
</div>
<f:form.button type="button" class = "sButton editSave" title = "editSave" id = "editSave" name = "editSave">Speichern</f:form.button>
</f:form>

и это мой js код

    $(".reply").on("click",function(){
    var textEl = getSelectionTextAndContainerElement();
    var className= "div."+textEl['containerElement']['className'];
    var divC=$(className).closest("div.tRow");
    alert(divC);
    var divC2=divC.find('div.blogUser');
    var bUser=divC2.text();
    alert(bUser);
    var text1=bUser+"\n"+textEl['text'];
    alert(text1);
    $(".editBlog").val(text1);

Сначала я попробовал:

        var divC=$(className).closest("div.blogUser").text();

но текст ( ) функция всегда возвращает пустую строку. Интересно, что если я выберу div напрямую, он возвращает строку

$("div.blogUser").text();

vars div C, а divC2 получает jquery OBJECTs, но если я использую объекты с text (), значение не возвращается.

Понятия не имею, в чем проблема! Надеюсь, кто-нибудь может мне помочь.

1 Ответ

0 голосов
/ 04 апреля 2020

Я нашел решение для моей проблемы без ближайшего. Сначала я добавил дополнение

Я также преобразовал HTMLDIVOBJECT в объект jQuery, чтобы убедиться, что я нахожусь в правильном блоке. Вот мой окончательный код:

    <div class = "tHead">
    <div class = "tRow">
        <div class = "tCell">
<h1>{sBlogs.0.blogName}</h1>
        </div>
    </div>
</div>
    <f:for each="{sBlogs}" as="blog">
    <div class="block">
        <div class = "tSub">
            <div class = "tRow">
                <div class = "tCell blogUser">
    User: {blog.blogUser}
                </div>
                <div class = "tCell blogDate">
    Date: {blog.blogDate -> f:format.date()}
                </div>
                <div class = "tCell blogCat">
    Category: {blog.blogCat}
                </div>
            </div>
        </div>
        <div class = "content">
    {blog.blogContent}
        </div>
        <div class="links">
        <f:image class="reply" src="EXT:simpleblog/Resources/Public/Icons/search.svg" />
        </div>
    </div>

    </f:for>
    <div class="replyBlog">
        <f:form.textarea class="editBlog" property="editBlog" rows="10" cols="80"/>
    </div>
<f:form.button type="button" class = "sButton editSave" title = "editSave" id = "editSave" name = "editSave">Speichern</f:form.button>
</f:form>

jquery:

    $(".reply").on("click",function(){
    var textEl = getSelectionTextAndContainerElement();
    var bUser = jQuery(textEl['containerElement']).parent().find('div.blogUser').text();
    alert('Container: \n'+bUser);
    var text1 = bUser+"\n"+textEl['text'];
    alert(text1);
    $(".editBlog").val(text1);
});
...